我在下面有一些调用XML RPC方法的Python代码:
from xmlrpclib import ServerProxy
s = ServerProxy("http://localhost:8000")
s.SomeMethod('parameter')
但是,当方法的名称(SomeMethod
)仅在运行时已知时会发生什么?当方法的名称在变量中时,有没有办法调用方法?
我尝试过以下操作,但没有一个能够正常工作:
s['SomeMethod']('parameter')
s.__getattr__('SomeMethod')('parameter')
getattr(s, 'SomeMethod')('parameter')
所有人都回来了:
xmlrpclib.Fault: <Fault -32601: 'Method not found'>
进一步编辑:这开始变得非常奇怪。当我使用s['SomeMethod']('parameter')
时,远程服务器报告我尝试调用XML方法__getattr__
。
答案 0 :(得分:1)
getattr
按预期方式工作。
如果我尝试获取返回值的repr
,则失败,因为ServerProxy类不公开“repr”方法。因此,如果从交互式提示中,我只输入:
>>> getattr(proxy, "is_even")
Traceback (most recent call last):
(...)
xmlrpclib.Fault: <Fault 1: '<type \'exceptions.Exception\'>:method "is_even.__repr__" is not supported'>
但我可以这样做:
>>> a = getattr(proxy, "is_even")
>>> a(5)
False
>>>
(使用的服务器端snipped是Python的cmlrpc文档中的一个: http://docs.python.org/library/xmlrpclib.html)