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 라이브러리 기반의 DLL을 사용하고 있습니다. 그리고 난 정말이 DLL의 코드를 변경하고 싶지 않아 ... – 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() 

역 추적 서버 측 :

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

관련 문제