• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /macosx-10.9.5/pyobjc-42/pyobjc/pyobjc-core/Examples/NonFunctional/RemotePyInterpreter/
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