blob: 1b84d4d96f0acf9788fd2a73e731bb6a2e16b883 [file] [log] [blame]
Chui Tey5d2af632002-05-26 13:36:41 +00001import sys
2import rpc
3
4def main():
5 port = 8833
6 if sys.argv[1:]:
7 port = int(sys.argv[1])
8 sys.argv[:] = [""]
9 addr = ("localhost", port)
10 svr = rpc.RPCServer(addr, MyHandler)
11 svr.handle_request() # A single request only
12
13class MyHandler(rpc.RPCHandler):
14
15 def handle(self):
16 executive = Executive(self)
17 self.register("exec", executive)
18 sys.stdin = self.get_remote_proxy("stdin")
19 sys.stdout = self.get_remote_proxy("stdout")
20 sys.stderr = self.get_remote_proxy("stderr")
21 rpc.RPCHandler.handle(self)
22
23class Executive:
24
25 def __init__(self, rpchandler):
26 self.conn = rpchandler
27 import __main__
28 self.locals = __main__.__dict__
29
30 def runcode(self, code):
31 exec code in self.locals
32
33 def start_debugger(self, gui_oid):
34 import RemoteDebugger
35 return RemoteDebugger.start_debugger(self.conn, gui_oid)
36
37 def stackviewer(self, flist_oid=None):
38 if not hasattr(sys, "last_traceback"):
39 return None
40 flist = None
41 if flist_oid is not None:
42 flist = self.conn.get_remote_proxy(flist_oid)
43 import RemoteObjectBrowser
44 import StackViewer
45 tb = sys.last_traceback
46 while tb and tb.tb_frame.f_globals["__name__"] in ["rpc", "run"]:
47 tb = tb.tb_next
48 item = StackViewer.StackTreeItem(flist, tb)
49 return RemoteObjectBrowser.remote_object_tree_item(item)