]> granicus.if.org Git - python/commitdiff
Reset the Python execution server environment to its initial value prior
authorKurt B. Kaiser <kbk@shore.net>
Sun, 28 Jul 2002 03:35:31 +0000 (03:35 +0000)
committerKurt B. Kaiser <kbk@shore.net>
Sun, 28 Jul 2002 03:35:31 +0000 (03:35 +0000)
to executing Run/F5 from an EditorWindow.

M ScriptBinding.py : add call to clear_the_environment()
M run.py           : implemented Executive.clear_the_environment()

Lib/idlelib/ScriptBinding.py
Lib/idlelib/run.py

index 68f9cd7d9585fc251dc0a8b6d8caa40a7c727ff9..6d4c652c5e4495a354ab6d41cdccc283e4a1cf1c 100644 (file)
@@ -144,10 +144,11 @@ class ScriptBinding:
         filename = self.getfilename()
         if not filename:
             return
-
         flist = self.editwin.flist
         shell = flist.open_shell()
         interp = shell.interp
+        # clear the subprocess environment before every Run/F5 invocation
+        interp.rpcclt.remotecall("exec", "clear_the_environment", (), {})
         # XXX Too often this discards arguments the user just set...
         interp.runcommand("""if 1:
             _filename = %s
@@ -155,6 +156,7 @@ class ScriptBinding:
             from os.path import basename as _basename
             if (not _sys.argv or
                 _basename(_sys.argv[0]) != _basename(_filename)):
+                # XXX 25 July 2002 KBK should this be sys.argv not _sys.argv?
                 _sys.argv = [_filename]
             del _filename, _sys, _basename
                 \n""" % `filename`)
index 5db652eb2ce16d7fee6f09eaa51ad0bf5a21c1de..cc3edf1beaa774a21f64a318795d5aa868b0f53c 100644 (file)
@@ -1,6 +1,7 @@
 import sys
 import time
 import socket
+import __main__
 import rpc
 
 def main():
@@ -55,11 +56,18 @@ class Executive:
 
     def __init__(self, rpchandler):
         self.rpchandler = rpchandler
-        import __main__
-        self.locals = __main__.__dict__
+        self.base_env_keys = __main__.__dict__.keys()
 
     def runcode(self, code):
-        exec code in self.locals
+       exec code in __main__.__dict__
+        
+    def clear_the_environment(self):
+        global __main__
+        env = __main__.__dict__
+        for key in env.keys():
+            if key not in self.base_env_keys:
+                del env[key]
+        env['__doc__'] = None
 
     def start_the_debugger(self, gui_adap_oid):
         import RemoteDebugger