SimpleXMLRPCServer クラスは SocketServer.TCPServer のサブクラスで、基本的なスタンドアロンの XML-RPC サーバーを作成する手段を提供します。
| function[, name]) |
function.__name__の値が用いられます。引数nameは通常の文字列でもユニコード文字列でも良く、Pythonで識別子として正しくない文字(" . "ピリオドなど )を含んでいても。
| instance[, allow_dotted_names]) |
オブジェクトを登録し、そのオブジェクトのregister_function()で
登録されていないメソッドを公開します。もし、instanceがメソッド
_dispatch()を定義していれば、_dispatch()が、リクエス
トされたメソッド名とパラメータの組を引数として呼び出されます。そして、
_dispatch()の返り値が結果としてクライアントに返されます。
そのAPIは def _dispatch(self, method, params)
(注意: paramsは可変引数リストではありません)です。仕事をするため
に下位の関数を呼ぶ時には、その関数はfunc(*params)のように呼ばれ
ます。_dispatch()の返り値はクライアントへ結果として返されます。
もし、
instanceがメソッド_dispatch()を定義していなければ、リク
エストされたメソッド名がそのインスタンスに定義されているメソッド名から
探されます。
もしオプション引数allow_dotted_namesが真(true)で、 インスタンスがメソッド_dispatch()を定義していないとき、 リクエストされたメソッド名がピリオドを含む場合は、(訳注: 通常のPythonでのピリオドの解釈と同様に)階層的にオブジェクトを探索し ます。そして、そこで見つかったオブジェクトをリクエストから渡された引数 で呼び出し、その返り値をクライアントに返します。
バージョン 2.3.5, 2.4.1 で 変更 された仕様: allow_dotted_names はセキュリティホールを塞ぐた めに追加されました。以前のバージョンは安全ではありません
| ) |
system.listMethods、system.methodHelp、system.methodSignature を登録します。
バージョン 2.3 で 新たに追加 された仕様です。
| ) |
('/', '/RPC2')です。
バージョン 2.5 で 新たに追加 された仕様です。
以下に例を示します。
from SimpleXMLRPCServer import SimpleXMLRPCServer
# Create server
server = SimpleXMLRPCServer(("localhost", 8000))
server.register_introspection_functions()
# Register pow() function; this will use the value of
# pow.__name__ as the name, which is just 'pow'.
server.register_function(pow)
# Register a function under a different name
def adder_function(x,y):
return x + y
server.register_function(adder_function, 'add')
# Register an instance; all the methods of the instance are
# published as XML-RPC methods (in this case, just 'div').
class MyFuncs:
def div(self, x, y):
return x // y
server.register_instance(MyFuncs())
# Run the server's main loop
server.serve_forever()
以下のクライアントコードは上のサーバーで使えるようになったメソッドを呼び出します:
import xmlrpclib
s = xmlrpclib.Server('http://localhost:8000')
print s.pow(2,3) # Returns 2**3 = 8
print s.add(2,3) # Returns 5
print s.div(5,2) # Returns 5//2 = 2
# Print list of available methods
print s.system.listMethods()
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。