我有一个XML RPC服务器,我需要注册一些装饰的函数。每当我从客户端调用这些注册函数时,我都会收到以下错误:
xmlrpclib.Fault ::方法"测试"不支持'>
以下是代码:
服务器代码:
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调用修饰函数的首选方法是什么。
答案 0 :(得分:0)
只需在注册时添加功能名称即可。
server.register_function(test, "test")
效果很好。
但你还需要修复装饰器本身:
AttributeError: "'tuple' object has no attribute 'pop'"