DebugClients/Python3/coverage/execfile.py

changeset 29
391dc0bc4ae5
parent 0
de9c2efb9d02
child 3495
fac17a82b431
--- 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

eric ide

mercurial