Mercurial > cpython-lru_cache-weakref
annotate Lib/idlelib/run.py @ 54294:dba767bc3155 legacy-trunk
remove mention of old ctypes version
| author | Benjamin Peterson <benjamin@python.org> |
|---|---|
| date | Sat, 23 May 2009 20:59:09 +0000 |
| parents | b984456196af |
| children | c6d32766e94c |
| rev | line source |
|---|---|
| 23547 | 1 import sys |
|
32484
f3cb95cd413f
Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents:
31412
diff
changeset
|
2 import linecache |
|
24386
0e27b67247da
Reverse the RPC socket connection: Python execution server connects to
Kurt B. Kaiser <kbk@shore.net>
parents:
23995
diff
changeset
|
3 import time |
|
0e27b67247da
Reverse the RPC socket connection: Python execution server connects to
Kurt B. Kaiser <kbk@shore.net>
parents:
23995
diff
changeset
|
4 import socket |
| 28096 | 5 import traceback |
|
29445
e5d03360571d
Interrupt module has been folded into the thread module
Kurt B. Kaiser <kbk@shore.net>
parents:
29365
diff
changeset
|
6 import thread |
| 28385 | 7 import threading |
|
47248
9acb314b9072
Queue renaming reversal part 3: move module into place and
Georg Brandl <georg@python.org>
parents:
47183
diff
changeset
|
8 import Queue |
|
25691
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25020
diff
changeset
|
9 |
|
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25020
diff
changeset
|
10 import CallTips |
|
35891
8fd46b660e66
Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents:
34945
diff
changeset
|
11 import AutoComplete |
|
8fd46b660e66
Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents:
34945
diff
changeset
|
12 |
|
25691
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25020
diff
changeset
|
13 import RemoteDebugger |
|
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25020
diff
changeset
|
14 import RemoteObjectBrowser |
|
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25020
diff
changeset
|
15 import StackViewer |
| 23547 | 16 import rpc |
| 17 | |
|
25691
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25020
diff
changeset
|
18 import __main__ |
|
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25020
diff
changeset
|
19 |
|
29365
72ce7cc03f27
Avoid problem resolving 'localhost'
Kurt B. Kaiser <kbk@shore.net>
parents:
29353
diff
changeset
|
20 LOCALHOST = '127.0.0.1' |
|
72ce7cc03f27
Avoid problem resolving 'localhost'
Kurt B. Kaiser <kbk@shore.net>
parents:
29353
diff
changeset
|
21 |
|
32484
f3cb95cd413f
Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents:
31412
diff
changeset
|
22 try: |
|
f3cb95cd413f
Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents:
31412
diff
changeset
|
23 import warnings |
|
f3cb95cd413f
Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents:
31412
diff
changeset
|
24 except ImportError: |
|
f3cb95cd413f
Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents:
31412
diff
changeset
|
25 pass |
|
f3cb95cd413f
Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents:
31412
diff
changeset
|
26 else: |
|
49510
0adf6bdb170f
support the optional line argument for idle
Benjamin Peterson <benjamin@python.org>
parents:
47248
diff
changeset
|
27 def idle_formatwarning_subproc(message, category, filename, lineno, |
|
49519
6938219dc5a6
use new showwarnings signature for idle #3391
Benjamin Peterson <benjamin@python.org>
parents:
49510
diff
changeset
|
28 file=None, line=None): |
|
32484
f3cb95cd413f
Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents:
31412
diff
changeset
|
29 """Format warnings the IDLE way""" |
|
f3cb95cd413f
Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents:
31412
diff
changeset
|
30 s = "\nWarning (from warnings module):\n" |
|
f3cb95cd413f
Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents:
31412
diff
changeset
|
31 s += ' File \"%s\", line %s\n' % (filename, lineno) |
|
49519
6938219dc5a6
use new showwarnings signature for idle #3391
Benjamin Peterson <benjamin@python.org>
parents:
49510
diff
changeset
|
32 line = linecache.getline(filename, lineno).strip() \ |
|
6938219dc5a6
use new showwarnings signature for idle #3391
Benjamin Peterson <benjamin@python.org>
parents:
49510
diff
changeset
|
33 if line is None else line |
|
32484
f3cb95cd413f
Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents:
31412
diff
changeset
|
34 if line: |
|
f3cb95cd413f
Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents:
31412
diff
changeset
|
35 s += " %s\n" % line |
|
f3cb95cd413f
Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents:
31412
diff
changeset
|
36 s += "%s: %s\n" % (category.__name__, message) |
|
f3cb95cd413f
Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents:
31412
diff
changeset
|
37 return s |
|
f3cb95cd413f
Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents:
31412
diff
changeset
|
38 warnings.formatwarning = idle_formatwarning_subproc |
|
f3cb95cd413f
Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents:
31412
diff
changeset
|
39 |
| 28385 | 40 # Thread shared globals: Establish a queue between a subthread (which handles |
| 41 # the socket) and the main thread (which runs user code), plus global | |
|
43512
37d8270ac8d9
Allow interrupt only when executing user code in subprocess
Kurt B. Kaiser <kbk@shore.net>
parents:
35891
diff
changeset
|
42 # completion, exit and interruptable (the main thread) flags: |
| 28385 | 43 |
| 29254 | 44 exit_now = False |
| 45 quitting = False | |
|
43512
37d8270ac8d9
Allow interrupt only when executing user code in subprocess
Kurt B. Kaiser <kbk@shore.net>
parents:
35891
diff
changeset
|
46 interruptable = False |
| 28385 | 47 |
|
29281
4992c60d422b
Added a config-main General option to delete sys.exitfunc. The default
Kurt B. Kaiser <kbk@shore.net>
parents:
29254
diff
changeset
|
48 def main(del_exitfunc=False): |
|
24386
0e27b67247da
Reverse the RPC socket connection: Python execution server connects to
Kurt B. Kaiser <kbk@shore.net>
parents:
23995
diff
changeset
|
49 """Start the Python execution server in a subprocess |
|
0e27b67247da
Reverse the RPC socket connection: Python execution server connects to
Kurt B. Kaiser <kbk@shore.net>
parents:
23995
diff
changeset
|
50 |
|
25691
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25020
diff
changeset
|
51 In the Python subprocess, RPCServer is instantiated with handlerclass |
|
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25020
diff
changeset
|
52 MyHandler, which inherits register/unregister methods from RPCHandler via |
|
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25020
diff
changeset
|
53 the mix-in class SocketIO. |
|
24386
0e27b67247da
Reverse the RPC socket connection: Python execution server connects to
Kurt B. Kaiser <kbk@shore.net>
parents:
23995
diff
changeset
|
54 |
| 28385 | 55 When the RPCServer 'server' is instantiated, the TCPServer initialization |
|
25691
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25020
diff
changeset
|
56 creates an instance of run.MyHandler and calls its handle() method. |
|
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25020
diff
changeset
|
57 handle() instantiates a run.Executive object, passing it a reference to the |
|
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25020
diff
changeset
|
58 MyHandler object. That reference is saved as attribute rpchandler of the |
|
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25020
diff
changeset
|
59 Executive instance. The Executive methods have access to the reference and |
|
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25020
diff
changeset
|
60 can pass it on to entities that they command |
|
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25020
diff
changeset
|
61 (e.g. RemoteDebugger.Debugger.start_debugger()). The latter, in turn, can |
|
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25020
diff
changeset
|
62 call MyHandler(SocketIO) register/unregister methods via the reference to |
|
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25020
diff
changeset
|
63 register and unregister themselves. |
|
24386
0e27b67247da
Reverse the RPC socket connection: Python execution server connects to
Kurt B. Kaiser <kbk@shore.net>
parents:
23995
diff
changeset
|
64 |
|
0e27b67247da
Reverse the RPC socket connection: Python execution server connects to
Kurt B. Kaiser <kbk@shore.net>
parents:
23995
diff
changeset
|
65 """ |
| 29254 | 66 global exit_now |
| 67 global quitting | |
|
29281
4992c60d422b
Added a config-main General option to delete sys.exitfunc. The default
Kurt B. Kaiser <kbk@shore.net>
parents:
29254
diff
changeset
|
68 global no_exitfunc |
|
4992c60d422b
Added a config-main General option to delete sys.exitfunc. The default
Kurt B. Kaiser <kbk@shore.net>
parents:
29254
diff
changeset
|
69 no_exitfunc = del_exitfunc |
|
31412
266f226f471d
Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents:
31311
diff
changeset
|
70 #time.sleep(15) # test subprocess not responding |
|
52710
b984456196af
Remove port spec from run.py and fix bug where
Kurt B. Kaiser <kbk@shore.net>
parents:
49519
diff
changeset
|
71 try: |
|
b984456196af
Remove port spec from run.py and fix bug where
Kurt B. Kaiser <kbk@shore.net>
parents:
49519
diff
changeset
|
72 assert(len(sys.argv) > 1) |
|
b984456196af
Remove port spec from run.py and fix bug where
Kurt B. Kaiser <kbk@shore.net>
parents:
49519
diff
changeset
|
73 port = int(sys.argv[-1]) |
|
b984456196af
Remove port spec from run.py and fix bug where
Kurt B. Kaiser <kbk@shore.net>
parents:
49519
diff
changeset
|
74 except: |
|
b984456196af
Remove port spec from run.py and fix bug where
Kurt B. Kaiser <kbk@shore.net>
parents:
49519
diff
changeset
|
75 print>>sys.stderr, "IDLE Subprocess: no IP port passed in sys.argv." |
|
b984456196af
Remove port spec from run.py and fix bug where
Kurt B. Kaiser <kbk@shore.net>
parents:
49519
diff
changeset
|
76 return |
| 23547 | 77 sys.argv[:] = [""] |
| 28385 | 78 sockthread = threading.Thread(target=manage_socket, |
| 79 name='SockThread', | |
|
29365
72ce7cc03f27
Avoid problem resolving 'localhost'
Kurt B. Kaiser <kbk@shore.net>
parents:
29353
diff
changeset
|
80 args=((LOCALHOST, port),)) |
| 28385 | 81 sockthread.setDaemon(True) |
| 82 sockthread.start() | |
| 83 while 1: | |
| 84 try: | |
| 29254 | 85 if exit_now: |
| 86 try: | |
|
29281
4992c60d422b
Added a config-main General option to delete sys.exitfunc. The default
Kurt B. Kaiser <kbk@shore.net>
parents:
29254
diff
changeset
|
87 exit() |
| 29254 | 88 except KeyboardInterrupt: |
| 89 # exiting but got an extra KBI? Try again! | |
| 90 continue | |
|
29034
656493534cc7
1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents:
28385
diff
changeset
|
91 try: |
|
34945
9fe7801fc9a4
Use Queue's blocking feature instead of sleeping in the main
Kurt B. Kaiser <kbk@shore.net>
parents:
34212
diff
changeset
|
92 seq, request = rpc.request_queue.get(block=True, timeout=0.05) |
|
47248
9acb314b9072
Queue renaming reversal part 3: move module into place and
Georg Brandl <georg@python.org>
parents:
47183
diff
changeset
|
93 except Queue.Empty: |
|
29034
656493534cc7
1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents:
28385
diff
changeset
|
94 continue |
|
656493534cc7
1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents:
28385
diff
changeset
|
95 method, args, kwargs = request |
|
656493534cc7
1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents:
28385
diff
changeset
|
96 ret = method(*args, **kwargs) |
|
656493534cc7
1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents:
28385
diff
changeset
|
97 rpc.response_queue.put((seq, ret)) |
|
29115
4f87a84e9beb
On Windows the subprocess was not exiting during a restart.
Kurt B. Kaiser <kbk@shore.net>
parents:
29076
diff
changeset
|
98 except KeyboardInterrupt: |
| 29254 | 99 if quitting: |
| 100 exit_now = True | |
|
29115
4f87a84e9beb
On Windows the subprocess was not exiting during a restart.
Kurt B. Kaiser <kbk@shore.net>
parents:
29076
diff
changeset
|
101 continue |
| 29156 | 102 except SystemExit: |
| 103 raise | |
|
29076
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
104 except: |
| 29254 | 105 type, value, tb = sys.exc_info() |
| 29156 | 106 try: |
| 107 print_exception() | |
| 108 rpc.response_queue.put((seq, None)) | |
| 109 except: | |
| 29254 | 110 # Link didn't work, print same exception to __stderr__ |
| 111 traceback.print_exception(type, value, tb, file=sys.__stderr__) | |
|
29281
4992c60d422b
Added a config-main General option to delete sys.exitfunc. The default
Kurt B. Kaiser <kbk@shore.net>
parents:
29254
diff
changeset
|
112 exit() |
| 29254 | 113 else: |
| 114 continue | |
| 28385 | 115 |
| 116 def manage_socket(address): | |
|
31412
266f226f471d
Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents:
31311
diff
changeset
|
117 for i in range(3): |
|
24386
0e27b67247da
Reverse the RPC socket connection: Python execution server connects to
Kurt B. Kaiser <kbk@shore.net>
parents:
23995
diff
changeset
|
118 time.sleep(i) |
|
0e27b67247da
Reverse the RPC socket connection: Python execution server connects to
Kurt B. Kaiser <kbk@shore.net>
parents:
23995
diff
changeset
|
119 try: |
|
29034
656493534cc7
1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents:
28385
diff
changeset
|
120 server = MyRPCServer(address, MyHandler) |
|
24386
0e27b67247da
Reverse the RPC socket connection: Python execution server connects to
Kurt B. Kaiser <kbk@shore.net>
parents:
23995
diff
changeset
|
121 break |
|
0e27b67247da
Reverse the RPC socket connection: Python execution server connects to
Kurt B. Kaiser <kbk@shore.net>
parents:
23995
diff
changeset
|
122 except socket.error, err: |
|
31412
266f226f471d
Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents:
31311
diff
changeset
|
123 print>>sys.__stderr__,"IDLE Subprocess: socket error: "\ |
|
266f226f471d
Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents:
31311
diff
changeset
|
124 + err[1] + ", retrying...." |
|
24386
0e27b67247da
Reverse the RPC socket connection: Python execution server connects to
Kurt B. Kaiser <kbk@shore.net>
parents:
23995
diff
changeset
|
125 else: |
|
31412
266f226f471d
Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents:
31311
diff
changeset
|
126 print>>sys.__stderr__, "IDLE Subprocess: Connection to "\ |
|
266f226f471d
Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents:
31311
diff
changeset
|
127 "IDLE GUI failed, exiting." |
|
266f226f471d
Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents:
31311
diff
changeset
|
128 show_socket_error(err, address) |
| 29254 | 129 global exit_now |
| 130 exit_now = True | |
|
29034
656493534cc7
1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents:
28385
diff
changeset
|
131 return |
| 28385 | 132 server.handle_request() # A single request only |
| 133 | |
|
31412
266f226f471d
Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents:
31311
diff
changeset
|
134 def show_socket_error(err, address): |
|
47183
b53604fad54b
Tkinter rename reversal: remove tkinter package, adapt imports and docs.
Georg Brandl <georg@python.org>
parents:
47101
diff
changeset
|
135 import Tkinter |
|
b53604fad54b
Tkinter rename reversal: remove tkinter package, adapt imports and docs.
Georg Brandl <georg@python.org>
parents:
47101
diff
changeset
|
136 import tkMessageBox |
|
b53604fad54b
Tkinter rename reversal: remove tkinter package, adapt imports and docs.
Georg Brandl <georg@python.org>
parents:
47101
diff
changeset
|
137 root = Tkinter.Tk() |
|
31412
266f226f471d
Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents:
31311
diff
changeset
|
138 root.withdraw() |
|
266f226f471d
Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents:
31311
diff
changeset
|
139 if err[0] == 61: # connection refused |
|
266f226f471d
Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents:
31311
diff
changeset
|
140 msg = "IDLE's subprocess can't connect to %s:%d. This may be due "\ |
|
266f226f471d
Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents:
31311
diff
changeset
|
141 "to your personal firewall configuration. It is safe to "\ |
|
266f226f471d
Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents:
31311
diff
changeset
|
142 "allow this internal connection because no data is visible on "\ |
|
266f226f471d
Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents:
31311
diff
changeset
|
143 "external ports." % address |
|
266f226f471d
Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents:
31311
diff
changeset
|
144 tkMessageBox.showerror("IDLE Subprocess Error", msg, parent=root) |
|
266f226f471d
Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents:
31311
diff
changeset
|
145 else: |
|
266f226f471d
Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents:
31311
diff
changeset
|
146 tkMessageBox.showerror("IDLE Subprocess Error", "Socket Error: %s" % err[1]) |
|
266f226f471d
Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents:
31311
diff
changeset
|
147 root.destroy() |
|
266f226f471d
Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents:
31311
diff
changeset
|
148 |
|
29076
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
149 def print_exception(): |
|
31311
5eb9e25e63fd
- Print correct exception even if source file changed since shell was
Kurt B. Kaiser <kbk@shore.net>
parents:
31007
diff
changeset
|
150 import linecache |
|
5eb9e25e63fd
- Print correct exception even if source file changed since shell was
Kurt B. Kaiser <kbk@shore.net>
parents:
31007
diff
changeset
|
151 linecache.checkcache() |
|
29076
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
152 flush_stdout() |
|
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
153 efile = sys.stderr |
| 31007 | 154 typ, val, tb = excinfo = sys.exc_info() |
| 155 sys.last_type, sys.last_value, sys.last_traceback = excinfo | |
|
29076
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
156 tbe = traceback.extract_tb(tb) |
|
31412
266f226f471d
Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents:
31311
diff
changeset
|
157 print>>efile, '\nTraceback (most recent call last):' |
|
29076
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
158 exclude = ("run.py", "rpc.py", "threading.py", "Queue.py", |
|
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
159 "RemoteDebugger.py", "bdb.py") |
|
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
160 cleanup_traceback(tbe, exclude) |
|
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
161 traceback.print_list(tbe, file=efile) |
|
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
162 lines = traceback.format_exception_only(typ, val) |
|
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
163 for line in lines: |
|
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
164 print>>efile, line, |
|
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
165 |
|
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
166 def cleanup_traceback(tb, exclude): |
|
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
167 "Remove excluded traces from beginning/end of tb; get cached lines" |
|
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
168 orig_tb = tb[:] |
|
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
169 while tb: |
|
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
170 for rpcfile in exclude: |
|
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
171 if tb[0][0].count(rpcfile): |
|
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
172 break # found an exclude, break for: and delete tb[0] |
|
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
173 else: |
|
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
174 break # no excludes, have left RPC code, break while: |
|
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
175 del tb[0] |
|
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
176 while tb: |
|
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
177 for rpcfile in exclude: |
|
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
178 if tb[-1][0].count(rpcfile): |
|
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
179 break |
|
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
180 else: |
|
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
181 break |
|
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
182 del tb[-1] |
|
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
183 if len(tb) == 0: |
|
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
184 # exception was in IDLE internals, don't prune! |
|
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
185 tb[:] = orig_tb[:] |
|
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
186 print>>sys.stderr, "** IDLE Internal Exception: " |
|
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
187 rpchandler = rpc.objecttable['exec'].rpchandler |
|
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
188 for i in range(len(tb)): |
|
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
189 fn, ln, nm, line = tb[i] |
|
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
190 if nm == '?': |
|
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
191 nm = "-toplevel-" |
|
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
192 if not line and fn.startswith("<pyshell#"): |
|
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
193 line = rpchandler.remotecall('linecache', 'getline', |
|
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
194 (fn, ln), {}) |
|
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
195 tb[i] = fn, ln, nm, line |
|
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
196 |
|
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
197 def flush_stdout(): |
|
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
198 try: |
|
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
199 if sys.stdout.softspace: |
|
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
200 sys.stdout.softspace = 0 |
|
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
201 sys.stdout.write("\n") |
|
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
202 except (AttributeError, EOFError): |
|
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
203 pass |
|
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
204 |
|
29281
4992c60d422b
Added a config-main General option to delete sys.exitfunc. The default
Kurt B. Kaiser <kbk@shore.net>
parents:
29254
diff
changeset
|
205 def exit(): |
|
4992c60d422b
Added a config-main General option to delete sys.exitfunc. The default
Kurt B. Kaiser <kbk@shore.net>
parents:
29254
diff
changeset
|
206 """Exit subprocess, possibly after first deleting sys.exitfunc |
|
4992c60d422b
Added a config-main General option to delete sys.exitfunc. The default
Kurt B. Kaiser <kbk@shore.net>
parents:
29254
diff
changeset
|
207 |
|
4992c60d422b
Added a config-main General option to delete sys.exitfunc. The default
Kurt B. Kaiser <kbk@shore.net>
parents:
29254
diff
changeset
|
208 If config-main.cfg/.def 'General' 'delete-exitfunc' is True, then any |
|
4992c60d422b
Added a config-main General option to delete sys.exitfunc. The default
Kurt B. Kaiser <kbk@shore.net>
parents:
29254
diff
changeset
|
209 sys.exitfunc will be removed before exiting. (VPython support) |
|
4992c60d422b
Added a config-main General option to delete sys.exitfunc. The default
Kurt B. Kaiser <kbk@shore.net>
parents:
29254
diff
changeset
|
210 |
|
4992c60d422b
Added a config-main General option to delete sys.exitfunc. The default
Kurt B. Kaiser <kbk@shore.net>
parents:
29254
diff
changeset
|
211 """ |
|
4992c60d422b
Added a config-main General option to delete sys.exitfunc. The default
Kurt B. Kaiser <kbk@shore.net>
parents:
29254
diff
changeset
|
212 if no_exitfunc: |
|
44897
d9a60752558e
There was an error on exit if no sys.exitfunc was defined. Issue 1647.
Kurt B. Kaiser <kbk@shore.net>
parents:
43512
diff
changeset
|
213 try: |
|
d9a60752558e
There was an error on exit if no sys.exitfunc was defined. Issue 1647.
Kurt B. Kaiser <kbk@shore.net>
parents:
43512
diff
changeset
|
214 del sys.exitfunc |
|
d9a60752558e
There was an error on exit if no sys.exitfunc was defined. Issue 1647.
Kurt B. Kaiser <kbk@shore.net>
parents:
43512
diff
changeset
|
215 except AttributeError: |
|
d9a60752558e
There was an error on exit if no sys.exitfunc was defined. Issue 1647.
Kurt B. Kaiser <kbk@shore.net>
parents:
43512
diff
changeset
|
216 pass |
|
29281
4992c60d422b
Added a config-main General option to delete sys.exitfunc. The default
Kurt B. Kaiser <kbk@shore.net>
parents:
29254
diff
changeset
|
217 sys.exit(0) |
| 23547 | 218 |
|
29034
656493534cc7
1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents:
28385
diff
changeset
|
219 class MyRPCServer(rpc.RPCServer): |
|
656493534cc7
1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents:
28385
diff
changeset
|
220 |
|
656493534cc7
1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents:
28385
diff
changeset
|
221 def handle_error(self, request, client_address): |
|
656493534cc7
1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents:
28385
diff
changeset
|
222 """Override RPCServer method for IDLE |
|
656493534cc7
1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents:
28385
diff
changeset
|
223 |
|
656493534cc7
1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents:
28385
diff
changeset
|
224 Interrupt the MainThread and exit server if link is dropped. |
|
656493534cc7
1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents:
28385
diff
changeset
|
225 |
|
656493534cc7
1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents:
28385
diff
changeset
|
226 """ |
|
34012
96f62c6798e8
On OpenBSD, terminating IDLE with ctrl-c from the command line caused a
Kurt B. Kaiser <kbk@shore.net>
parents:
32484
diff
changeset
|
227 global quitting |
|
29034
656493534cc7
1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents:
28385
diff
changeset
|
228 try: |
|
656493534cc7
1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents:
28385
diff
changeset
|
229 raise |
|
656493534cc7
1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents:
28385
diff
changeset
|
230 except SystemExit: |
|
656493534cc7
1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents:
28385
diff
changeset
|
231 raise |
|
656493534cc7
1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents:
28385
diff
changeset
|
232 except EOFError: |
| 29254 | 233 global exit_now |
| 234 exit_now = True | |
|
29445
e5d03360571d
Interrupt module has been folded into the thread module
Kurt B. Kaiser <kbk@shore.net>
parents:
29365
diff
changeset
|
235 thread.interrupt_main() |
|
29034
656493534cc7
1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents:
28385
diff
changeset
|
236 except: |
|
656493534cc7
1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents:
28385
diff
changeset
|
237 erf = sys.__stderr__ |
|
656493534cc7
1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents:
28385
diff
changeset
|
238 print>>erf, '\n' + '-'*40 |
|
656493534cc7
1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents:
28385
diff
changeset
|
239 print>>erf, 'Unhandled server exception!' |
|
656493534cc7
1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents:
28385
diff
changeset
|
240 print>>erf, 'Thread: %s' % threading.currentThread().getName() |
|
656493534cc7
1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents:
28385
diff
changeset
|
241 print>>erf, 'Client Address: ', client_address |
|
656493534cc7
1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents:
28385
diff
changeset
|
242 print>>erf, 'Request: ', repr(request) |
|
656493534cc7
1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents:
28385
diff
changeset
|
243 traceback.print_exc(file=erf) |
|
656493534cc7
1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents:
28385
diff
changeset
|
244 print>>erf, '\n*** Unrecoverable, server exiting!' |
|
656493534cc7
1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents:
28385
diff
changeset
|
245 print>>erf, '-'*40 |
|
34012
96f62c6798e8
On OpenBSD, terminating IDLE with ctrl-c from the command line caused a
Kurt B. Kaiser <kbk@shore.net>
parents:
32484
diff
changeset
|
246 quitting = True |
|
96f62c6798e8
On OpenBSD, terminating IDLE with ctrl-c from the command line caused a
Kurt B. Kaiser <kbk@shore.net>
parents:
32484
diff
changeset
|
247 thread.interrupt_main() |
|
29034
656493534cc7
1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents:
28385
diff
changeset
|
248 |
|
656493534cc7
1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents:
28385
diff
changeset
|
249 |
| 23547 | 250 class MyHandler(rpc.RPCHandler): |
| 251 | |
| 252 def handle(self): | |
| 28385 | 253 """Override base method""" |
| 23547 | 254 executive = Executive(self) |
| 255 self.register("exec", executive) | |
|
29353
b1395014714a
Modify the remote stack viewer to work in the threaded subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents:
29281
diff
changeset
|
256 sys.stdin = self.console = self.get_remote_proxy("stdin") |
| 23547 | 257 sys.stdout = self.get_remote_proxy("stdout") |
| 258 sys.stderr = self.get_remote_proxy("stderr") | |
|
29582
ee14e5b06ed1
Idlefork patch #682347: convert Unicode strings from readline to
Martin v. Löwis <martin@v.loewis.de>
parents:
29452
diff
changeset
|
259 import IOBinding |
|
ee14e5b06ed1
Idlefork patch #682347: convert Unicode strings from readline to
Martin v. Löwis <martin@v.loewis.de>
parents:
29452
diff
changeset
|
260 sys.stdin.encoding = sys.stdout.encoding = \ |
|
ee14e5b06ed1
Idlefork patch #682347: convert Unicode strings from readline to
Martin v. Löwis <martin@v.loewis.de>
parents:
29452
diff
changeset
|
261 sys.stderr.encoding = IOBinding.encoding |
|
29353
b1395014714a
Modify the remote stack viewer to work in the threaded subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents:
29281
diff
changeset
|
262 self.interp = self.get_remote_proxy("interp") |
|
29034
656493534cc7
1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents:
28385
diff
changeset
|
263 rpc.RPCHandler.getresponse(self, myseq=None, wait=0.05) |
|
656493534cc7
1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents:
28385
diff
changeset
|
264 |
|
656493534cc7
1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents:
28385
diff
changeset
|
265 def exithook(self): |
|
656493534cc7
1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents:
28385
diff
changeset
|
266 "override SocketIO method - wait for MainThread to shut us down" |
| 29254 | 267 time.sleep(10) |
|
29034
656493534cc7
1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents:
28385
diff
changeset
|
268 |
|
656493534cc7
1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents:
28385
diff
changeset
|
269 def EOFhook(self): |
|
656493534cc7
1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents:
28385
diff
changeset
|
270 "Override SocketIO method - terminate wait on callback and exit thread" |
| 29254 | 271 global quitting |
| 272 quitting = True | |
|
29445
e5d03360571d
Interrupt module has been folded into the thread module
Kurt B. Kaiser <kbk@shore.net>
parents:
29365
diff
changeset
|
273 thread.interrupt_main() |
|
29034
656493534cc7
1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents:
28385
diff
changeset
|
274 |
|
656493534cc7
1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents:
28385
diff
changeset
|
275 def decode_interrupthook(self): |
|
656493534cc7
1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents:
28385
diff
changeset
|
276 "interrupt awakened thread" |
| 29254 | 277 global quitting |
| 278 quitting = True | |
|
29445
e5d03360571d
Interrupt module has been folded into the thread module
Kurt B. Kaiser <kbk@shore.net>
parents:
29365
diff
changeset
|
279 thread.interrupt_main() |
| 28385 | 280 |
| 23547 | 281 |
|
34212
1e8b033f91dc
The remote procedure call module rpc.py can now access data attributes of
Kurt B. Kaiser <kbk@shore.net>
parents:
34012
diff
changeset
|
282 class Executive(object): |
| 23547 | 283 |
| 284 def __init__(self, rpchandler): | |
|
23995
41468f9353ce
Shutdown subprocess debugger and associated Proxies/Adapters when closing
Kurt B. Kaiser <kbk@shore.net>
parents:
23876
diff
changeset
|
285 self.rpchandler = rpchandler |
|
25020
e41058845b79
1. Revert subprocess environment clearing, will restart subprocess
Kurt B. Kaiser <kbk@shore.net>
parents:
24559
diff
changeset
|
286 self.locals = __main__.__dict__ |
|
25691
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25020
diff
changeset
|
287 self.calltip = CallTips.CallTips() |
|
35891
8fd46b660e66
Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents:
34945
diff
changeset
|
288 self.autocomplete = AutoComplete.AutoComplete() |
| 23547 | 289 |
| 290 def runcode(self, code): | |
|
43512
37d8270ac8d9
Allow interrupt only when executing user code in subprocess
Kurt B. Kaiser <kbk@shore.net>
parents:
35891
diff
changeset
|
291 global interruptable |
| 28096 | 292 try: |
|
29353
b1395014714a
Modify the remote stack viewer to work in the threaded subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents:
29281
diff
changeset
|
293 self.usr_exc_info = None |
|
43512
37d8270ac8d9
Allow interrupt only when executing user code in subprocess
Kurt B. Kaiser <kbk@shore.net>
parents:
35891
diff
changeset
|
294 interruptable = True |
|
37d8270ac8d9
Allow interrupt only when executing user code in subprocess
Kurt B. Kaiser <kbk@shore.net>
parents:
35891
diff
changeset
|
295 try: |
|
37d8270ac8d9
Allow interrupt only when executing user code in subprocess
Kurt B. Kaiser <kbk@shore.net>
parents:
35891
diff
changeset
|
296 exec code in self.locals |
|
37d8270ac8d9
Allow interrupt only when executing user code in subprocess
Kurt B. Kaiser <kbk@shore.net>
parents:
35891
diff
changeset
|
297 finally: |
|
37d8270ac8d9
Allow interrupt only when executing user code in subprocess
Kurt B. Kaiser <kbk@shore.net>
parents:
35891
diff
changeset
|
298 interruptable = False |
| 28096 | 299 except: |
|
29353
b1395014714a
Modify the remote stack viewer to work in the threaded subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents:
29281
diff
changeset
|
300 self.usr_exc_info = sys.exc_info() |
| 29254 | 301 if quitting: |
|
29281
4992c60d422b
Added a config-main General option to delete sys.exitfunc. The default
Kurt B. Kaiser <kbk@shore.net>
parents:
29254
diff
changeset
|
302 exit() |
| 29254 | 303 # even print a user code SystemExit exception, continue |
| 304 print_exception() | |
|
29353
b1395014714a
Modify the remote stack viewer to work in the threaded subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents:
29281
diff
changeset
|
305 jit = self.rpchandler.console.getvar("<<toggle-jit-stack-viewer>>") |
|
b1395014714a
Modify the remote stack viewer to work in the threaded subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents:
29281
diff
changeset
|
306 if jit: |
|
b1395014714a
Modify the remote stack viewer to work in the threaded subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents:
29281
diff
changeset
|
307 self.rpchandler.interp.open_remote_stack_viewer() |
| 28385 | 308 else: |
|
29076
ad84fe58ec2f
1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents:
29034
diff
changeset
|
309 flush_stdout() |
| 23547 | 310 |
| 27920 | 311 def interrupt_the_server(self): |
|
43512
37d8270ac8d9
Allow interrupt only when executing user code in subprocess
Kurt B. Kaiser <kbk@shore.net>
parents:
35891
diff
changeset
|
312 if interruptable: |
|
37d8270ac8d9
Allow interrupt only when executing user code in subprocess
Kurt B. Kaiser <kbk@shore.net>
parents:
35891
diff
changeset
|
313 thread.interrupt_main() |
| 28385 | 314 |
|
23876
832f0501148b
Polish RemoteDebugger code.
Kurt B. Kaiser <kbk@shore.net>
parents:
23547
diff
changeset
|
315 def start_the_debugger(self, gui_adap_oid): |
|
23995
41468f9353ce
Shutdown subprocess debugger and associated Proxies/Adapters when closing
Kurt B. Kaiser <kbk@shore.net>
parents:
23876
diff
changeset
|
316 return RemoteDebugger.start_debugger(self.rpchandler, gui_adap_oid) |
|
41468f9353ce
Shutdown subprocess debugger and associated Proxies/Adapters when closing
Kurt B. Kaiser <kbk@shore.net>
parents:
23876
diff
changeset
|
317 |
|
41468f9353ce
Shutdown subprocess debugger and associated Proxies/Adapters when closing
Kurt B. Kaiser <kbk@shore.net>
parents:
23876
diff
changeset
|
318 def stop_the_debugger(self, idb_adap_oid): |
|
41468f9353ce
Shutdown subprocess debugger and associated Proxies/Adapters when closing
Kurt B. Kaiser <kbk@shore.net>
parents:
23876
diff
changeset
|
319 "Unregister the Idb Adapter. Link objects and Idb then subject to GC" |
|
41468f9353ce
Shutdown subprocess debugger and associated Proxies/Adapters when closing
Kurt B. Kaiser <kbk@shore.net>
parents:
23876
diff
changeset
|
320 self.rpchandler.unregister(idb_adap_oid) |
| 23547 | 321 |
|
25691
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25020
diff
changeset
|
322 def get_the_calltip(self, name): |
|
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25020
diff
changeset
|
323 return self.calltip.fetch_tip(name) |
|
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25020
diff
changeset
|
324 |
|
35891
8fd46b660e66
Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents:
34945
diff
changeset
|
325 def get_the_completion_list(self, what, mode): |
|
8fd46b660e66
Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents:
34945
diff
changeset
|
326 return self.autocomplete.fetch_completions(what, mode) |
|
8fd46b660e66
Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents:
34945
diff
changeset
|
327 |
| 23547 | 328 def stackviewer(self, flist_oid=None): |
|
29353
b1395014714a
Modify the remote stack viewer to work in the threaded subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents:
29281
diff
changeset
|
329 if self.usr_exc_info: |
|
b1395014714a
Modify the remote stack viewer to work in the threaded subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents:
29281
diff
changeset
|
330 typ, val, tb = self.usr_exc_info |
|
b1395014714a
Modify the remote stack viewer to work in the threaded subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents:
29281
diff
changeset
|
331 else: |
| 23547 | 332 return None |
| 333 flist = None | |
| 334 if flist_oid is not None: | |
|
23995
41468f9353ce
Shutdown subprocess debugger and associated Proxies/Adapters when closing
Kurt B. Kaiser <kbk@shore.net>
parents:
23876
diff
changeset
|
335 flist = self.rpchandler.get_remote_proxy(flist_oid) |
| 23547 | 336 while tb and tb.tb_frame.f_globals["__name__"] in ["rpc", "run"]: |
| 337 tb = tb.tb_next | |
|
29353
b1395014714a
Modify the remote stack viewer to work in the threaded subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents:
29281
diff
changeset
|
338 sys.last_type = typ |
|
b1395014714a
Modify the remote stack viewer to work in the threaded subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents:
29281
diff
changeset
|
339 sys.last_value = val |
| 23547 | 340 item = StackViewer.StackTreeItem(flist, tb) |
| 341 return RemoteObjectBrowser.remote_object_tree_item(item) |
