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.py49
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)