2016-06-24 8 views
0

필자는 장식 된 일부 기능을 등록해야하는 XML RPC 서버를 가지고 있습니다. 나는 클라이언트에서 그 등록 된 함수를 호출 할 때마다, 나는 오류가 아래 얻을 :파이썬에서 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}) 

하는 방법이 오류가 해결 될 수있다 디. 파이썬에서 XML RPC를 사용하여 데코 레이팅 된 함수를 호출하는 기본 방법은 무엇입니까?

답변

0

함수의 이름을 등록하기 만하면됩니다. server.register_function(test, "test")이 효과적입니다.

그러나 당신은 또한 수정 장식 자체가 필요합니다 `파일 "/System/Library/Frameworks/Python.framework/Versions/2.7/ : 나는 코드를 수정하고 지금은 다른 예외를 얻고있다 AttributeError: "'tuple' object has no attribute 'pop'"

+0

lib/python2.7/xmlrpclib.py ", 줄 793, 닫음 raise 오류 (** self._stack [0]) xmlrpclib.Fault : <오류 1 :"<유형 'exceptions.TypeError'> : 정수 is required "> ' @Shpionus : 왜이 ​​오류가 발생하는지 알고 싶습니까? – user2819403

+0

현재 코드 버전을 표시 할 수 있습니까? –