Python实现简单xml-rpc服务器

本网站用的阿里云ECS,推荐大家用。自己搞个学习研究也不错
以下程序均来自《Python.UNIX和Linux系统管理指南》http://www.linuxidc.com/Linux/2013-06/86448.htm

XML-RPC在两个进程之间交换指定格式的XML文档,以实现远程过程调用,还有一个更加高级的工具Pyro,由于现在的版本是Pyro4与书中所使用的版本有很大差异,等有时间再去研究一下

xml_rpc_server.py

#!/usr/bin/en python

import SimpleXMLRPCServer

import os

def ls(directory):

        try:

                return os.listdir(directory)

        except OSError:

                return []

def ls_boom(directory):

        return os.listdir(directory)

def cb(obj):

        print “OPBJECT::”, obj

        print “OBJECT.__class__::”, obj.__class__

        return obj.cb()

if __name__ == ‘__main__’:

        s = SimpleXMLRPCServer.SimpleXMLRPCServer((‘127.0.0.1’, 8765))

        s.register_function(ls)

        s.register_function(ls_boom)

        s.register_function(cb)

        s.serve_forever()

运行结果:

服务端

[root@CentOS python]# python xml_rpc_server.py

127.0.0.1 – – [19/Jun/2013 12:04:05] “POST /RPC2 HTTP/1.1” 200 –

127.0.0.1 – – [19/Jun/2013 12:04:19] “POST /RPC2 HTTP/1.1” 200 –

127.0.0.1 – – [19/Jun/2013 12:04:36] “POST /RPC2 HTTP/1.1” 200 –

127.0.0.1 – – [19/Jun/2013 12:04:50] “POST /RPC2 HTTP/1.1” 200 –

客户端

[root@centos python]# python

Python 2.7.5 (default, Jun 19 2013, 07:19:44)

[GCC 4.1.2 20080704 (Red Hat 4.1.2-52)] on linux2

Type “help”, “copyright”, “credits” or “license” for more information.

>>> import xmlrpclib

>>> x = xmlrpclib.ServerProxy(‘http://localhost:8765’)

>>> x.ls(‘.’)

[‘check_web.py’, ‘ftp_client.py’, ‘helloworld.pdf’, ’email_attachment.py’, ‘sendemail.py’, ‘pdf.py’, ‘xml_rpc_server.py’, ‘diskreport.py’, ‘httplib_check_web.py’, ‘check_tcp_port.py’, ‘disk_report.pdf’]

>>> x.ls_boom(‘.’)

[‘check_web.py’, ‘ftp_client.py’, ‘helloworld.pdf’, ’email_attachment.py’, ‘sendemail.py’, ‘pdf.py’, ‘xml_rpc_server.py’, ‘diskreport.py’, ‘httplib_check_web.py’, ‘check_tcp_port.py’, ‘disk_report.pdf’]

>>> x.ls(‘/foo’)

[]

>>> x.ls_boom(‘/foo’)

Traceback (most recent call last):

  File “”, line 1, in

  File “/usr/local/python27/lib/python2.7/xmlrpclib.py”, line 1224, in __call__

    return self.__send(self.__name, args)

  File “/usr/local/python27/lib/python2.7/xmlrpclib.py”, line 1578, in __request

    verbose=self.__verbose

  File “/usr/local/python27/lib/python2.7/xmlrpclib.py”, line 1264, in request

    return self.single_request(host, handler, request_body, verbose)

  File “/usr/local/python27/lib/python2.7/xmlrpclib.py”, line 1297, in single_request

    return self.parse_response(response)

  File “/usr/local/python27/lib/python2.7/xmlrpclib.py”, line 1473, in parse_response

    return u.close()

  File “/usr/local/python27/lib/python2.7/xmlrpclib.py”, line 793, in close

未经允许不得转载:演道网 » Python实现简单xml-rpc服务器

赞 (0)
分享到:更多 ()

评论 0

评论前必须登录!

登陆 注册