2013-06-27 35 views
0

我无法获取xmlrpclib.ServerProxy()方法的列表。我曾尝试使用dir();然而,解释器不断返回一个错误。如何在不使用dir()的情况下获取xmlrpclib.ServerProxy()的方法列表?

这是我的尝试:

>>>s = xmlrpclib.ServerProxy("http://192.168.1.72:8888") 
>>>dir(s) 

而且我得到这个错误:

Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
File "/usr/lib/python2.7/xmlrpclib.py", line 1224, in __call__ 
return self.__send(self.__name, args) 
File "/usr/lib/python2.7/xmlrpclib.py", line 1578, in __request 
verbose=self.__verbose 
File "/usr/lib/python2.7/xmlrpclib.py", line 1264, in request 
return self.single_request(host, handler, request_body, verbose) 
File "/usr/lib/python2.7/xmlrpclib.py", line 1297, in single_request 
return self.parse_response(response) 
File "/usr/lib/python2.7/xmlrpclib.py", line 1473, in parse_response 
return u.close() 
File "/usr/lib/python2.7/xmlrpclib.py", line 793, in close 
raise Fault(**self._stack[0]) 

xmlrpclib.Fault: <Fault 1: '<type \'exceptions.Exception\'>:method "__dir__" is not supported'> 

迪尔()是不支持的,我怎么能得到的方法列表?

+1

你以后代理对象的方法,或者通过远程系统所支持的方法? – Aya

+0

@Aya我很抱歉,我确实在寻找可以在远程系统上调用的方法。 – mitchfish36

回答

8

我可能是错的,但我怀疑你是什么真的之后是远程系统支持的方法,它将被代理(按需)到本地对象。

如果服务器支持的XML API内省,你可以使用ServerProxy.system.listMethods()方法...

>>> s = xmlrpclib.ServerProxy("http://192.168.1.72:8888") 
>>> s.system.listMethods() 
+0

如果服务器不支持introspection API,您是否知道一种方便的方法来完成此操作? – wedi

1
>>> import xmlrpclib 
>>> dir (xmlrpclib.ServerProxy) 
['_ServerProxy__close', '_ServerProxy__request', '__call__', '__doc__', '__getattr__', '__init__', '__module__', '__repr__', '__str__'] 

这是你在追求什么?

根据docs当您传递dir对象的实例时,它会在该对象中查找名为__dir__的方法,并返回在该对象上调用该方法的结果。由于ServerProxy未实现__dir__,因此您必须在class对象上调用它以获取其属性列表。

编辑:由于你实际上在远程系统上寻找方法,这个答案现在有点没用,但我想我会留在这里作为任何人绊倒这个问题的参考。

+0

'dir(s____ class __)'也适用。 – Aya

+0

感谢您的回应,我实际上正在寻找可以在远程系统上调用的方法。例如“object.update_resource()” – mitchfish36

+0

@Brian - 它不同于在一个对象上调用dir,它将返回(从docstriing):_its属性,它的类的属性,递归地它的类的基类的属性classes_。该类上的调用仅返回对象上的调用返回的子集。例如,它将不包含任何实例属性。 – mata

相关问题