3

我无法获取 xmlrpclib.ServerProxy() 上的方法列表。我试过使用 dir(); 但是,解释器不断返回错误。

这是我尝试过的:

>>>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'>

不支持 Dir(),如何获取方法列表?

4

2 回答 2

9

我可能是错的,但我怀疑你真正想要的是远程系统支持的方法,这些方法将被代理(按需)到本地对象。

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

>>> s = xmlrpclib.ServerProxy("http://192.168.1.72:8888")
>>> s.system.listMethods()
于 2013-06-27T15:38:53.640 回答
1
>>> import xmlrpclib
>>> dir (xmlrpclib.ServerProxy)
['_ServerProxy__close', '_ServerProxy__request', '__call__', '__doc__', '__getattr__', '__init__', '__module__', '__repr__', '__str__']

这就是你所追求的?

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

编辑:由于您实际上是在远程系统上寻找方法,所以这个答案现在有点没用,但我想我会把它留在这里作为任何偶然发现这个问题的人的参考。

于 2013-06-27T15:30:33.923 回答