diff options
Diffstat (limited to 'Lib/idlelib/run.py')
| -rw-r--r-- | Lib/idlelib/run.py | 41 |
1 files changed, 25 insertions, 16 deletions
diff --git a/Lib/idlelib/run.py b/Lib/idlelib/run.py index 5560af8..270ea15 100644 --- a/Lib/idlelib/run.py +++ b/Lib/idlelib/run.py @@ -1,5 +1,4 @@ import sys -import os import linecache import time import socket @@ -8,13 +7,13 @@ import thread import threading import Queue -import CallTips -import AutoComplete +from idlelib import CallTips +from idlelib import AutoComplete -import RemoteDebugger -import RemoteObjectBrowser -import StackViewer -import rpc +from idlelib import RemoteDebugger +from idlelib import RemoteObjectBrowser +from idlelib import StackViewer +from idlelib import rpc import __main__ @@ -25,11 +24,13 @@ try: except ImportError: pass else: - def idle_formatwarning_subproc(message, category, filename, lineno): + def idle_formatwarning_subproc(message, category, filename, lineno, + file=None, line=None): """Format warnings the IDLE way""" s = "\nWarning (from warnings module):\n" s += ' File \"%s\", line %s\n' % (filename, lineno) - line = linecache.getline(filename, lineno).strip() + line = linecache.getline(filename, lineno).strip() \ + if line is None else line if line: s += " %s\n" % line s += "%s: %s\n" % (category.__name__, message) @@ -38,10 +39,11 @@ else: # Thread shared globals: Establish a queue between a subthread (which handles # 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 quitting = False +interruptable = False def main(del_exitfunc=False): """Start the Python execution server in a subprocess @@ -116,7 +118,7 @@ def manage_socket(address): break except socket.error, err: print>>sys.__stderr__,"IDLE Subprocess: socket error: "\ - + err[1] + ", retrying...." + + err.args[1] + ", retrying...." else: print>>sys.__stderr__, "IDLE Subprocess: Connection to "\ "IDLE GUI failed, exiting." @@ -131,14 +133,15 @@ def show_socket_error(err, address): import tkMessageBox root = Tkinter.Tk() root.withdraw() - if err[0] == 61: # connection refused + if err.args[0] == 61: # connection refused msg = "IDLE's subprocess can't connect to %s:%d. This may be due "\ "to your personal firewall configuration. It is safe to "\ "allow this internal connection because no data is visible on "\ "external ports." % address tkMessageBox.showerror("IDLE Subprocess Error", msg, parent=root) else: - tkMessageBox.showerror("IDLE Subprocess Error", "Socket Error: %s" % err[1]) + tkMessageBox.showerror("IDLE Subprocess Error", + "Socket Error: %s" % err.args[1]) root.destroy() def print_exception(): @@ -251,7 +254,7 @@ class MyHandler(rpc.RPCHandler): sys.stdin = self.console = self.get_remote_proxy("stdin") sys.stdout = self.get_remote_proxy("stdout") sys.stderr = self.get_remote_proxy("stderr") - import IOBinding + from idlelib import IOBinding sys.stdin.encoding = sys.stdout.encoding = \ sys.stderr.encoding = IOBinding.encoding self.interp = self.get_remote_proxy("interp") @@ -283,9 +286,14 @@ class Executive(object): self.autocomplete = AutoComplete.AutoComplete() def runcode(self, code): + global interruptable try: self.usr_exc_info = None - exec code in self.locals + interruptable = True + try: + exec code in self.locals + finally: + interruptable = False except: self.usr_exc_info = sys.exc_info() if quitting: @@ -299,7 +307,8 @@ class Executive(object): flush_stdout() def interrupt_the_server(self): - thread.interrupt_main() + if interruptable: + thread.interrupt_main() def start_the_debugger(self, gui_adap_oid): return RemoteDebugger.start_debugger(self.rpchandler, gui_adap_oid) |
