python xmlrpcバイナリファイル転送を実現するコード、簡単なリモートコール
3237 ワード
サーバー側ファイルをローカルに読み込む
サーバ側
view source
print ?
クライアントコード
XML-RPCで簡単なリモートコールを実現するには、リモートマシン上で実行されるPythonプログラムの関数や方程式を実行する簡単な方法を見つけたいと考えています.
法
client:
サーバ側
view source
print ?
from
SimpleXMLRPCServer
import
SimpleXMLRPCServer
import
xmlrpclib
def
python_logo():
handle
=
open
(
"python_logo.jpg"
,
'rb'
)
return
xmlrpclib.Binary(handle.read())
handle.close()
server
=
SimpleXMLRPCServer((
"localhost"
,
8000
))
print
"Listening on port 8000..."
server.register_function(python_logo,
'python_logo'
)
server.serve_forever()
# : http://www.sharejs.com/codes/python/5725
クライアントコード
import
xmlrpclib
proxy
=
xmlrpclib.ServerProxy(
"http://localhost:8000/"
)
handle
=
open
(
"fetched_python_logo.jpg"
,
"wb"
)
handle.write(proxy.python_logo().data)
handle.close()
XML-RPCで簡単なリモートコールを実現するには、リモートマシン上で実行されるPythonプログラムの関数や方程式を実行する簡単な方法を見つけたいと考えています.
法
#from xmlrpc.server import SimpleXMLRPCServer
from SimpleXMLRPCServer import SimpleXMLRPCServer
import xmlrpclib
from xmlrpclib import ServerProxy
class KeyValueServer:
_rpc_methods_ = ['get', 'set', 'delete', 'exists', 'keys']
def __init__(self, address):
self._data = {}
self._serv = SimpleXMLRPCServer(address, allow_none=True)
for name in self._rpc_methods_:
self._serv.register_function(getattr(self, name))
def get(self, name):
return self._data[name]
def set(self, name, value):
self._data[name] = value
def delete(self, name):
del self._data[name]
def exists(self, name):
return name in self._data
def keys(self):
return list(self._data)
def serve_forever(self):
self._serv.serve_forever()
# Example
if __name__ == '__main__':
kvserv = KeyValueServer(('', 15000))
print "xml-rpc running."
kvserv.serve_forever()
client:
>>> from xmlrpclib import ServerProxy
>>> s = ServerProxy('http://localhost:15000', allow_none=True)
>>> s.set('foo', 'bar')
>>> s.set('spam', [1, 2, 3])
>>> s.keys()
['spam', 'foo']
>>> s.get('foo')
'bar'
>>> s.get('spam')
[1, 2, 3]
>>> s.delete('spam')
>>> s.exists('spam')
False
>>>