symbian-qemu-0.9.1-12/python-2.6.1/Demo/sockets/rpythond.py
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     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 
       
     8 import sys
       
     9 from socket import *
       
    10 import StringIO
       
    11 import traceback
       
    12 
       
    13 PORT = 4127
       
    14 BUFSIZE = 1024
       
    15 
       
    16 def 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 
       
    37 def 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 
       
    52 main()