Kaydet (Commit) 62df0448 authored tarafından Kurt B. Kaiser's avatar Kurt B. Kaiser

Added a config-main General option to delete sys.exitfunc. The default

is not to do that.  VPython and student environment support.

M PyShell.py
M config-main.def
M run.py
üst f7c82207
......@@ -312,13 +312,14 @@ class ModifiedInterpreter(InteractiveInterpreter):
InteractiveInterpreter.__init__(self, locals=locals)
self.save_warnings_filters = None
self.restarting = False
self.subprocess_arglist = self.build_subprocess_arglist()
port = 8833
rpcclt = None
rpcpid = None
def spawn_subprocess(self):
args = self.build_subprocess_arglist()
args = self.subprocess_arglist
self.rpcpid = os.spawnv(os.P_NOWAIT, args[0], args)
def build_subprocess_arglist(self):
......@@ -326,10 +327,12 @@ class ModifiedInterpreter(InteractiveInterpreter):
# Maybe IDLE is installed and is being accessed via sys.path,
# or maybe it's not installed and the idle.py script is being
# run from the IDLE source directory.
del_exitf = idleConf.GetOption('main', 'General', 'delete-exitfunc',
default=False, type='bool')
if __name__ == 'idlelib.PyShell':
command = "__import__('idlelib.run').run.main()"
command = "__import__('idlelib.run').run.main(" + `del_exitf` +")"
else:
command = "__import__('run').main()"
command = "__import__('run').main(" + `del_exitf` + ")"
return [sys.executable] + w + ["-c", command, str(self.port)]
def start_subprocess(self):
......
......@@ -43,6 +43,7 @@ editor-on-startup= 0
autosave= 0
print-command-posix=lpr %s
print-command-win=start /min notepad /p %s
delete-exitfunc= 0
[EditorWindow]
width= 80
......
......@@ -24,7 +24,7 @@ import __main__
exit_now = False
quitting = False
def main():
def main(del_exitfunc=False):
"""Start the Python execution server in a subprocess
In the Python subprocess, RPCServer is instantiated with handlerclass
......@@ -44,6 +44,8 @@ def main():
"""
global exit_now
global quitting
global no_exitfunc
no_exitfunc = del_exitfunc
port = 8833
if sys.argv[1:]:
port = int(sys.argv[1])
......@@ -57,7 +59,7 @@ def main():
try:
if exit_now:
try:
sys.exit(0)
exit()
except KeyboardInterrupt:
# exiting but got an extra KBI? Try again!
continue
......@@ -83,7 +85,7 @@ def main():
except:
# Link didn't work, print same exception to __stderr__
traceback.print_exception(type, value, tb, file=sys.__stderr__)
sys.exit(0)
exit()
else:
continue
......@@ -159,6 +161,16 @@ def flush_stdout():
except (AttributeError, EOFError):
pass
def exit():
"""Exit subprocess, possibly after first deleting sys.exitfunc
If config-main.cfg/.def 'General' 'delete-exitfunc' is True, then any
sys.exitfunc will be removed before exiting. (VPython support)
"""
if no_exitfunc:
del sys.exitfunc
sys.exit(0)
class MyRPCServer(rpc.RPCServer):
......@@ -186,7 +198,7 @@ class MyRPCServer(rpc.RPCServer):
traceback.print_exc(file=erf)
print>>erf, '\n*** Unrecoverable, server exiting!'
print>>erf, '-'*40
sys.exit(0)
exit()
class MyHandler(rpc.RPCHandler):
......@@ -229,7 +241,7 @@ class Executive:
exec code in self.locals
except:
if quitting:
sys.exit(0)
exit()
# even print a user code SystemExit exception, continue
print_exception()
else:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment