1#! /usr/bin/env python 2 3""" 4 start socket based minimal readline exec server 5""" 6import sys, socket, os 7 8def runsocketcode(clientfile, g): 9 try: 10 source = clientfile.readline().rstrip() 11 except Exception, e: 12 raise SystemExit 13 if not source: 14 raise SystemExit 15 source = eval(source) 16 co = compile(source+'\n', '<remote-source>', 'exec') 17 exec co in g 18 19def serveonce(clientsock, name='stdin'): 20 clientfile = clientsock.makefile('r+b', 0) 21 g = { 22 '__name__': '__socketclient__', 23 '__file__': '<%s>' % (name,), 24 '__clientsock__': clientsock, 25 '__clientfile__': clientfile, 26 '__runsocketcode__': runsocketcode, 27 } 28 try: 29 runsocketcode(clientfile, g) 30 finally: 31 clientfile.close() 32 clientsock.close() 33 34def real_main(): 35 import sys 36 hostport = eval(sys.argv[1]) 37 clientsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 38 clientsock.connect(hostport) 39 serveonce(clientsock) 40 41def main(): 42 newglobals = { 43 '__builtins__': sys.modules['__builtin__'], 44 '__doc__': None, 45 '__name__': '__main__', 46 } 47 sourcefile = __file__ 48 g = globals() 49 g.clear() 50 g.update(newglobals) 51 serverglobals = {'__name__': '__socketclient__'} 52 execfile(sourcefile, serverglobals, serverglobals) 53 54if __name__ == '__main__': 55 main() 56elif __name__ == '__socketclient__': 57 real_main() 58