77
88import sys
99import threading
10+ import types
1011import xmlrpclib
1112
1213try :
@@ -29,11 +30,9 @@ def __init__(self, port):
2930 self .reset ()
3031
3132 self .server = SimpleXMLRPCServer (addr = ("" , self .port ), logRequests = False , allow_none = True , encoding = UNICODE_ENCODING )
32- self .server .register_function (self .reset )
33- self .server .register_function (self .set_option )
34- self .server .register_function (self .get_option )
35- self .server .register_function (self .get_option_names )
36- self .server .register_function (self .run )
33+ for _ in dir (self ):
34+ if not _ .startswith ('_' ) and isinstance (getattr (self , _ ), types .MethodType ):
35+ self .server .register_function (getattr (self , _ ))
3736 logger .info ("Registering RPC methods: %s" % str (self .server .system_listMethods ()).strip ("[]" ))
3837 self .server .register_introspection_functions ()
3938 logger .info ("Running XML-RPC server at '0.0.0.0:%d'..." % self .port )
@@ -43,16 +42,28 @@ def reset(self):
4342
4443 def set_option (self , name , value ):
4544 self .options [name ] = value
45+ return value
4646
4747 def get_option (self , name ):
4848 return self .options [name ]
4949
5050 def get_option_names (self ):
51- return self .options .keys ()
51+ return sorted ( self .options .keys () )
5252
5353 def is_busy (self ):
5454 return kb .get ("busyFlag" )
5555
56+ def read_output (self ):
57+ retval = []
58+ for _ in ("stdout" , "stderr" ):
59+ stream = getattr (sys , _ )
60+ stream .seek (0 )
61+ retval .append (stream .read ())
62+ stream .truncate (0 )
63+ if not filter (None , retval ) and not self .is_busy ():
64+ retval = None
65+ return retval
66+
5667 def run (self ):
5768 if not self .is_busy ():
5869 init (self .options , True )
@@ -85,11 +96,12 @@ def serve(self):
8596 else :
8697 while True :
8798 try :
88- _ = raw_input ("> " )
89- if not _ .startswith ("print" ):
90- print eval (_ ) or ""
91- else :
92- exec (_ )
99+ cmd = raw_input ("> " )
100+ try :
101+ result = eval (cmd )
102+ print result if result is not None else ""
103+ except SyntaxError :
104+ exec (cmd )
93105 except KeyboardInterrupt :
94106 exit (0 )
95107 except Exception , ex :
0 commit comments