50 lines
1.4 KiB
Python
50 lines
1.4 KiB
Python
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)
|