def _run_eval_string(source, filename, space, eval): if eval: cmd = 'eval' else: cmd = 'exec' try: if space is None: from pypy.objspace.std.objspace import StdObjSpace space = StdObjSpace() pycode = compilecode(space, source, filename or '<string>', cmd) mainmodule = ensure__main__(space) w_globals = mainmodule.w_dict space.setitem(w_globals, space.newtext('__builtins__'), space.builtin) if filename is not None: space.setitem(w_globals, space.newtext('__file__'), space.newtext(filename)) retval = pycode.exec_code(space, w_globals, w_globals) if eval: return retval else: return except OperationError as operationerr: operationerr.record_interpreter_traceback() raise
def run_module(module_name, args, space=None): """Implements PEP 338 'Executing modules as scripts', overwriting sys.argv[1:] using `args` and executing the module `module_name`. sys.argv[0] always is `module_name`. Delegates the real work to the runpy module provided as the reference implementation. """ if space is None: from pypy.objspace.std.objspace import StdObjSpace space = StdObjSpace() argv = [module_name] if args is not None: argv.extend(args) space.setitem(space.sys.w_dict, space.newtext('argv'), space.wrap(argv)) w_import = space.builtin.get('__import__') runpy = space.call_function(w_import, space.newtext('runpy')) w_run_module = space.getitem(runpy.w_dict, space.newtext('run_module')) return space.call_function(w_run_module, space.newtext(module_name), space.w_None, space.newtext('__main__'), space.w_True)