--- a/DebugClients/Python3/coverage/execfile.py Thu Jan 07 12:31:11 2010 +0000 +++ b/DebugClients/Python3/coverage/execfile.py Thu Jan 07 13:13:31 2010 +0000 @@ -2,20 +2,32 @@ import imp, os, sys +from .backward import exec_function +from .misc import NoSource + + +try: + # In Py 2.x, the builtins were in __builtin__ + BUILTINS = sys.modules['__builtin__'] +except KeyError: + # In Py 3.x, they're in builtins + BUILTINS = sys.modules['builtins'] + + def run_python_file(filename, args): """Run a python file as if it were the main program on the command line. - + `filename` is the path to the file to execute, it need not be a .py file. `args` is the argument array to present as sys.argv, including the first element representing the file being executed. - + """ # Create a module to serve as __main__ old_main_mod = sys.modules['__main__'] main_mod = imp.new_module('__main__') sys.modules['__main__'] = main_mod main_mod.__file__ = filename - main_mod.__builtins__ = sys.modules['__builtin__'] + main_mod.__builtins__ = BUILTINS # Set sys.argv and the first path element properly. old_argv = sys.argv @@ -24,12 +36,15 @@ sys.path[0] = os.path.dirname(filename) try: - source = open(filename, 'rU').read() - exec(compile(source, filename, "exec"), main_mod.__dict__) + try: + source = open(filename, 'rU').read() + except IOError: + raise NoSource("No file to run: %r" % filename) + exec_function(source, filename, main_mod.__dict__) finally: # Restore the old __main__ sys.modules['__main__'] = old_main_mod - + # Restore the old argv and path sys.argv = old_argv - sys.path[0] = old_path0 + sys.path[0] = old_path0 \ No newline at end of file