Package logilab-common-0 ::
Package 39 ::
Package 0 ::
Module monserver
|
|
1
2 """A TCP server implemented in a separate thread that
3 allows *one* client to connect and provides a command line interpreter
4 allowing the remote client to explore the process on the fly.
5
6 :copyright: 2000-2008 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
7 :contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr
8 :license: General Public License version 2 - http://www.gnu.org/licenses
9 """
10 __docformat__ = "restructuredtext en"
11
12 from warnings import warn
13 warn('this module is deprecated and will disappear in a near release',
14 DeprecationWarning, stacklevel=1)
15
16 import threading
17 import SocketServer
18 import traceback
19 import code
20 import sys
21 import time
22
23
24
25
26
27
28
29
30
31
32
34 """Subclasses InteractiveConsole so that all inputs
35 and outputs are done through a socket"""
37 code.InteractiveConsole.__init__(self)
38 self.wfile = wfile
39 self.rfile = rfile
40 sys.stdout = self.wfile
41 sys.stderr = self.wfile
42
44 """replace stderr output by writing to wfile"""
45 self.wfile.write( data )
46 self.wfile.flush()
47
59
60
62 """Request handler for remote interpreter"""
63 - def __init__(self, request, clientaddress, server ):
64 self.locals = {}
65 self.globals = globals().copy()
66 self.wfile = request.makefile("w")
67 self.rfile = request.makefile("r")
68 SocketServer.BaseRequestHandler.__init__(self, request, clientaddress,
69 server )
70
72 """handle on request, through MonitorInterpreter"""
73 saved_stdout = sys.stdout
74 saved_stderr = sys.stderr
75 interpreter = MonitorInterpreter(self.rfile, self.wfile)
76 try:
77 interpreter.interact()
78 except KeyboardInterrupt:
79 self.server.exit = True
80 except:
81 sys.stdout = saved_stdout
82 sys.stderr = saved_stderr
83 traceback.print_exc()
84 print "Monitor handler exited"
85
87 """Monitor server. monothreaded we only
88 allow one client at a time"""
90 threading.Thread.__init__(self)
91 self.host = host
92 self.port = port
93 self.exit = False
94
95
97 """run the server loop"""
98 server = SocketServer.TCPServer( (self.host, self.port),
99 MonitorRequestHandler )
100 while not self.exit:
101 server.handle_request()
102
103
104
106 """sample demo server that outputs
107 numbers on screen"""
108 cnt = 1
109 while 1:
110 print cnt
111 time.sleep(2)
112 cnt += 1
113
114 if __name__ == "__main__":
115 listen_port = int(sys.argv[1])
116 mon = Monitor( "", listen_port )
117 mon.start()
118 try:
119 demo_forever()
120 except Exception:
121 traceback.print_exc()
122 mon.exit = True
123 mon.join()
124