0

我在下面有一些调用 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__

4

1 回答 1

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

(使用的服务器端截图来自 Python 的 cmlrpc 文档: http ://docs.python.org/library/xmlrpclib.html )

于 2012-07-06T03:27:13.173 回答