繁体   English   中英

如何在xmlrpc服务器上查看回溯,而不是客户端?

[英]How to see traceback on xmlrpc server, not client?

我有简单的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 -

问题是我是否也可以在服务器上获得此跟踪。 我需要知道处理查询是否出错。 我没有使用Python编写的客户端,所以我很难像上面那样得到回溯。

你可以这样做:

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 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM