【发布时间】:2016-06-24 11:49:10
【问题描述】:
我有一个 XML RPC 服务器,我需要在该服务器上注册一些经过修饰的函数。每次我从客户端调用这些注册函数时,都会出现以下错误:
xmlrpclib.Fault: :method "test" is not supported'>
下面是代码:
服务器代码:
from SimpleXMLRPCServer import SimpleXMLRPCServer
import functools
import xmlrpclib
class Server(object):
def __init__(self, hostport):
self.server = SimpleXMLRPCServer(hostport)
def serve_forever(self):
self.server.serve_forever()
server = Server(('localhost', 8000))
def wrapper(func):
def checker(*args):
if isinstance(args[-1], dict):
args = list(args)
kwargs = args.pop(args[-1])
return func(*args, **kwargs)
else:
return func(*args)
return checker
@wrapper
def test(kwargs):
print kwargs
return 0
server.server.register_function(wrapper, "wrapper")
server.server.register_function(test, "test")
server.serve_forever()
客户代码:
import xmlrpclib
import functools
import inspect
_orig_Method = xmlrpclib._Method
class KeywordArgMethod(_orig_Method):
def __call__(self, *args, **kwargs):
args = list(args)
if kwargs:
args = list(args)
args.append(kwargs)
return _orig_Method.__call__(self, *args)
xmlrpclib._Method = KeywordArgMethod
class ServerProxy(object):
def __init__(self, url):
self._xmlrpc_server_proxy = xmlrpclib.ServerProxy(url)
#example usage
if __name__ == "__main__":
server = ServerProxy('http://localhost:8000')
server._xmlrpc_server_proxy.test(**{'arg1':1, 'arg2':2})
如何解决此错误。在 python 中使用 XML RPC 调用修饰函数的首选方法是什么。
【问题讨论】: