关于xmlrpclib:python中的xmlrpcserver实现能够注册整个模块吗?

xmlrpcserver implementation in python capable of registering an entire module?

我有一个系统,在这个系统中,代码位于访问远程系统的驱动程序上。我正在使用xmlrpcserver的simplexmlrpcserver实现,它工作得很好。函数和实例可以注册,但我认为不能注册整个模块。特别是,我想注册操作系统模块。这是simplexmlrpcserver的一种可能性,还是有其他实现允许这样做?


一种方法是迭代模块中的方法,并用register_instance注册每个方法。

例如,使用此SimpleXMLRPCServer示例作为起点,使用此stackoverflow答案迭代模块中的函数:

服务器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from SimpleXMLRPCServer import SimpleXMLRPCServer
import os

server = SimpleXMLRPCServer(('localhost', 9000))

def list_contents(dir_name):
    return os.listdir(dir_name)
for name, val in os.__dict__.items():
    if callable(val):
        print"Registering" +  name
        server.register_function(val, name)

try:
    print 'Use Control-C to exit'
    server.serve_forever()
except KeyboardInterrupt:
    print 'Exiting'

顾客

1
2
3
4
import xmlrpclib

proxy = xmlrpclib.ServerProxy('http://localhost:9000')
print 'os.listdir():', proxy.listdir('.')