0

XMLRPCメソッドを呼び出す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私にとって期待通りに動作します。reprServerProxyクラスは「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 に答える