diff options
author | Chui Tey <chui.tey@advdata.com.au> | 2002-05-26 13:36:41 (GMT) |
---|---|---|
committer | Chui Tey <chui.tey@advdata.com.au> | 2002-05-26 13:36:41 (GMT) |
commit | 5d2af63cc36ca1141e1ec7412fc33866f3908408 (patch) | |
tree | 016d52a42559ae57d279719f711df48ad45bd204 /Lib/idlelib/run.py | |
parent | 38d53451b74d10f5b2045878e907ea510d94aed0 (diff) | |
download | cpython-5d2af63cc36ca1141e1ec7412fc33866f3908408.zip cpython-5d2af63cc36ca1141e1ec7412fc33866f3908408.tar.gz cpython-5d2af63cc36ca1141e1ec7412fc33866f3908408.tar.bz2 |
GvR's rpc patch
Diffstat (limited to 'Lib/idlelib/run.py')
-rw-r--r-- | Lib/idlelib/run.py | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/Lib/idlelib/run.py b/Lib/idlelib/run.py new file mode 100644 index 0000000..1b84d4d --- /dev/null +++ b/Lib/idlelib/run.py @@ -0,0 +1,49 @@ +import sys +import rpc + +def main(): + port = 8833 + if sys.argv[1:]: + port = int(sys.argv[1]) + sys.argv[:] = [""] + addr = ("localhost", port) + svr = rpc.RPCServer(addr, MyHandler) + svr.handle_request() # A single request only + +class MyHandler(rpc.RPCHandler): + + def handle(self): + executive = Executive(self) + self.register("exec", executive) + sys.stdin = self.get_remote_proxy("stdin") + sys.stdout = self.get_remote_proxy("stdout") + sys.stderr = self.get_remote_proxy("stderr") + rpc.RPCHandler.handle(self) + +class Executive: + + def __init__(self, rpchandler): + self.conn = rpchandler + import __main__ + self.locals = __main__.__dict__ + + def runcode(self, code): + exec code in self.locals + + def start_debugger(self, gui_oid): + import RemoteDebugger + return RemoteDebugger.start_debugger(self.conn, gui_oid) + + def stackviewer(self, flist_oid=None): + if not hasattr(sys, "last_traceback"): + return None + flist = None + if flist_oid is not None: + flist = self.conn.get_remote_proxy(flist_oid) + import RemoteObjectBrowser + import StackViewer + tb = sys.last_traceback + while tb and tb.tb_frame.f_globals["__name__"] in ["rpc", "run"]: + tb = tb.tb_next + item = StackViewer.StackTreeItem(flist, tb) + return RemoteObjectBrowser.remote_object_tree_item(item) |