Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在xmlrpc服务器而不是客户端上查看回溯?_Python_Multithreading_Simplexmlrpcserver_Xmlrpclib_Xmlrpcclient - Fatal编程技术网

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

Python 如何在xmlrpc服务器而不是客户端上查看回溯?,python,multithreading,simplexmlrpcserver,xmlrpclib,xmlrpcclient,Python,Multithreading,Simplexmlrpcserver,Xmlrpclib,Xmlrpcclient,我有简单的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

我有简单的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()
示例会话

客户:


问题是我是否也可以在服务器上获取此跟踪。我需要知道处理查询时是否出现问题。我没有使用用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 

你的问题真让人困惑。您说您没有在python中使用客户机,但您的客户机是python代码。是的,但这只是一个示例。作为客户端,我正在使用一些基于xmlrpc-c库的dll。而且我真的不想更改这个dll的代码…这将节省我几天的时间。谢谢。应该显式使用requestHandler关键字,
SimpleXMLRPCServer((“localhost”,port),requestHandler=Handler)
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