source: python/vendor/Python-2.7.6/Demo/sockets/rpythond.py

Last change on this file was 2, checked in by Yuri Dario, 15 years ago

Initial import for vendor code.

  • Property svn:eol-style set to native
File size: 1.2 KB
Line 
1#! /usr/bin/env python
2
3# Remote python server.
4# Execute Python commands remotely and send output back.
5# WARNING: This version has a gaping security hole -- it accepts requests
6# from any host on the Internet!
7
8import sys
9from socket import *
10import StringIO
11import traceback
12
13PORT = 4127
14BUFSIZE = 1024
15
16def main():
17 if len(sys.argv) > 1:
18 port = int(eval(sys.argv[1]))
19 else:
20 port = PORT
21 s = socket(AF_INET, SOCK_STREAM)
22 s.bind(('', port))
23 s.listen(1)
24 while 1:
25 conn, (remotehost, remoteport) = s.accept()
26 print 'connected by', remotehost, remoteport
27 request = ''
28 while 1:
29 data = conn.recv(BUFSIZE)
30 if not data:
31 break
32 request = request + data
33 reply = execute(request)
34 conn.send(reply)
35 conn.close()
36
37def execute(request):
38 stdout = sys.stdout
39 stderr = sys.stderr
40 sys.stdout = sys.stderr = fakefile = StringIO.StringIO()
41 try:
42 try:
43 exec request in {}, {}
44 except:
45 print
46 traceback.print_exc(100)
47 finally:
48 sys.stderr = stderr
49 sys.stdout = stdout
50 return fakefile.getvalue()
51
52main()
Note: See TracBrowser for help on using the repository browser.