summaryrefslogtreecommitdiffstats
path: root/Lib/idlelib/run.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/idlelib/run.py')
-rw-r--r--Lib/idlelib/run.py41
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)