12.11.3 加点的API名
还可以用通常情况下不能作为合法Python标识符的名字来注册各个函数。例如,可以在名字中包含一个点号(.)来分隔服务中的命名空间。下面的例子扩展了"目录"服务,增加了"创建"和"删除"调用。所有函数注册时都使用了前缀dir.,这样同一个服务器就可以通过使用不同的前缀来提供其他服务。这个例子中还有一点不同,有些函数会返回None,所有必须告诉服务器将None值转换为一个nil值。
from xmlrpc.server import SimpleXMLRPCServer
import os
server = SimpleXMLRPCServer(('localhost',9000),allow_none=True)
server.register_function(os.listdir,'dir.list')
server.register_function(os.mkdir,'dir.create')
server.register_function(os.rmdir,'dir.remove')
try:
print('Use Control-C to exit')
server.serve_forever()
except KeyboardInterrupt:
print('Exiting')
要在客户中调用服务函数,只需要加点的名来指示函数。
import xmlrpc.client
proxy = xmlrpc.client.ServerProxy('http://localhost:9000')
print('BEFORE :','EXAMPLE' in proxy.dir.list('/tmp'))
print('CREATE :',proxy.dir.create('/tmp/EXAMPLE'))
print('SHOULD EXIST:','EXAMPLE' in proxy.dir.list('/tmp'))
print('REMOVE :',proxy.dir.remove('/tmp/EXAMPLE'))
print('AFTER :','EXAMPLE' in proxy.dir.list('/tmp'))
假设当前系统上没有/tmp/EXAMPLE文件,那么示例客户脚本会生成以下输出。
运行结果: