5

मेरे पास सरल xmlrpc सर्वर कोड है:Xmlrpc सर्वर पर ट्रेसबैक कैसे देखें, क्लाइंट नहीं?

from SimpleXMLRPCServer import SimpleXMLRPCServer 

port = 9999 

def func(): 
    print 'Hi!' 
    print x # error! 
    print 'Bye!' 

if __name__ == '__main__': 
    server = SimpleXMLRPCServer(("localhost", port)) 
    print "Listening on port %s..." % port 
    server.register_function(func) 
    server.serve_forever() 

नमूना सत्र।

क्लाइंट:

>>> import xmlrpclib 
>>> p = xmlrpclib.ServerProxy('http://localhost:9999') 
>>> p.func() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "C:\Python26\lib\xmlrpclib.py", line 1199, in __call__ 
    return self.__send(self.__name, args) 
    File "C:\Python26\lib\xmlrpclib.py", line 1489, in __request 
    verbose=self.__verbose 
    File "C:\Python26\lib\xmlrpclib.py", line 1253, in request 
    return self._parse_response(h.getfile(), sock) 
    File "C:\Python26\lib\xmlrpclib.py", line 1392, in _parse_response 
    return u.close() 
    File "C:\Python26\lib\xmlrpclib.py", line 838, in close 
    raise Fault(**self._stack[0]) 
xmlrpclib.Fault: <Fault 1: "<type 'exceptions.NameError'>:global name 'x' is not defined"> 
>>> 

सर्वर:

Listening on port 9999... 
Hi! 
localhost - - [11/Jan/2011 16:17:09] "POST /RPC2 HTTP/1.0" 200 - 

प्रश्न यह है कि अगर मैं सर्वर पर यह ट्रेस वापस भी प्राप्त कर सकता हूं। मुझे यह जानने की ज़रूरत है कि प्रोसेसिंग क्वेरी के साथ कुछ गलत हो गया है या नहीं। मैं पायथन में लिखे गए क्लाइंट का उपयोग नहीं कर रहा हूं इसलिए मेरे लिए ऊपर की तरह ट्रेसबैक प्राप्त करना मुश्किल है।

+0

आपका प्रश्न वास्तव में भ्रामक है। आप कहते हैं कि आप पाइथन में क्लाइंट का उपयोग नहीं कर रहे हैं, लेकिन आपका क्लाइंट पायथन कोड है। – Falmarri

+0

हां, लेकिन यह सिर्फ उदाहरण है। क्लाइंट के रूप में मैं कुछ डीएलएल का उपयोग कर रहा हूं जो xmlrpc-c लाइब्रेरी पर आधारित है। और मैं वास्तव में इस डीएलएल कोड को बदलना नहीं चाहता ... – Adam

उत्तर

9

आप कुछ इस तरह कर सकते हैं:

from SimpleXMLRPCServer import SimpleXMLRPCServer, SimpleXMLRPCRequestHandler 

port = 9999 

def func(): 
    print 'Hi!' 
    print x # error! 
    print 'Bye!' 

class Handler(SimpleXMLRPCRequestHandler): 
    def _dispatch(self, method, params): 
     try: 
      return self.server.funcs[method](*params) 
     except: 
      import traceback 
      traceback.print_exc() 
      raise 


if __name__ == '__main__': 
    server = SimpleXMLRPCServer(("localhost", port), Handler) 
    server.register_function(func) 
    print "Listening on port %s..." % port 
    server.serve_forever() 

Traceback सर्वर साइड:

Listening on port 9999... 
Hi! 
Traceback (most recent call last): 
    File "xml.py", line 13, in _dispatch 
    value = self.server.funcs[method](*params) 
    File "xml.py", line 7, in func 
    print x # error! 
NameError: global name 'x' is not defined 
localhost - - [11/Jan/2011 17:13:16] "POST /RPC2 HTTP/1.0" 200 
+1

धन्यवाद! यह मेरे लिए अच्छा समाधान होगा। – Adam

+0

इससे मुझे सिर धमाके के दिन बचाएंगे। धन्यवाद। – Jamie

संबंधित मुद्दे