mirror of
https://github.com/python/cpython.git
synced 2025-09-13 20:27:05 +00:00
Allow interrupt only when executing user code in subprocess
Patch 1225 Tal Einat modified from IDLE-Spoon.
This commit is contained in:
parent
e7f4d84830
commit
c8f65e69da
2 changed files with 13 additions and 3 deletions
|
@ -3,6 +3,9 @@ What's New in IDLE 2.6a1?
|
||||||
|
|
||||||
*Release date: XX-XXX-200X*
|
*Release date: XX-XXX-200X*
|
||||||
|
|
||||||
|
- Allow keyboard interrupt only when user code is executing in subprocess.
|
||||||
|
Patch 1225 Tal Einat (reworked from IDLE-Spoon).
|
||||||
|
|
||||||
- configDialog cleanup. Patch 1730217 Tal Einat.
|
- configDialog cleanup. Patch 1730217 Tal Einat.
|
||||||
|
|
||||||
- textView cleanup. Patch 1718043 Tal Einat.
|
- textView cleanup. Patch 1718043 Tal Einat.
|
||||||
|
|
|
@ -38,10 +38,11 @@ else:
|
||||||
|
|
||||||
# Thread shared globals: Establish a queue between a subthread (which handles
|
# Thread shared globals: Establish a queue between a subthread (which handles
|
||||||
# the socket) and the main thread (which runs user code), plus global
|
# the socket) and the main thread (which runs user code), plus global
|
||||||
# completion and exit flags:
|
# completion, exit and interruptable (the main thread) flags:
|
||||||
|
|
||||||
exit_now = False
|
exit_now = False
|
||||||
quitting = False
|
quitting = False
|
||||||
|
interruptable = False
|
||||||
|
|
||||||
def main(del_exitfunc=False):
|
def main(del_exitfunc=False):
|
||||||
"""Start the Python execution server in a subprocess
|
"""Start the Python execution server in a subprocess
|
||||||
|
@ -280,9 +281,14 @@ class Executive(object):
|
||||||
self.autocomplete = AutoComplete.AutoComplete()
|
self.autocomplete = AutoComplete.AutoComplete()
|
||||||
|
|
||||||
def runcode(self, code):
|
def runcode(self, code):
|
||||||
|
global interruptable
|
||||||
try:
|
try:
|
||||||
self.usr_exc_info = None
|
self.usr_exc_info = None
|
||||||
exec code in self.locals
|
interruptable = True
|
||||||
|
try:
|
||||||
|
exec code in self.locals
|
||||||
|
finally:
|
||||||
|
interruptable = False
|
||||||
except:
|
except:
|
||||||
self.usr_exc_info = sys.exc_info()
|
self.usr_exc_info = sys.exc_info()
|
||||||
if quitting:
|
if quitting:
|
||||||
|
@ -296,7 +302,8 @@ class Executive(object):
|
||||||
flush_stdout()
|
flush_stdout()
|
||||||
|
|
||||||
def interrupt_the_server(self):
|
def interrupt_the_server(self):
|
||||||
thread.interrupt_main()
|
if interruptable:
|
||||||
|
thread.interrupt_main()
|
||||||
|
|
||||||
def start_the_debugger(self, gui_adap_oid):
|
def start_the_debugger(self, gui_adap_oid):
|
||||||
return RemoteDebugger.start_debugger(self.rpchandler, gui_adap_oid)
|
return RemoteDebugger.start_debugger(self.rpchandler, gui_adap_oid)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue