我在从 SimpleXMLRPCServer 子类化的多个设备上有许多服务器,并且都倾向于在端口 9999 上运行。但是,我想插入要听的接口说
想:
server 0.0.0.0 9999
或者:
server host=0.0.0.0 port=9999
得到:
server (*sys.argv[:1])
然后服务器选择了错误的接口来监听,因为基类“太聪明”了。
基类通过从本地主机上可用的 IP 中选择一个来生成 IP。如何指定 IP 而不破坏所有子类的向后兼容性?
通常每台服务器都会接受一个端口,似乎总是 9999。然后通过 interfacelist 寻找一个不是 127.0.0.1 的端口。
建议:如果 arg 是一个数字,则假设它是一个端口。如果它的 IP 假设它是一个主机。
class Server(SimpleXMLRPCServer):
def __init__(self, port=1234):
host = get_ip()
SimpleXMLRPCServer.__init__(self,addr=(host, port))
这感觉像是一个奇怪的妥协,因为它颠倒了 SimpleXMLRPCServer 子类的参数:
class Server(SimpleXMLRPCServer):
def __init__(self, port, host=None):
if host is None:
host = get_ip()
SimpleXMLRPCServer.__init__(self,addr=(host, port))
如果更改影响了所有 4 个子类,我会感到失望,客户不会知道有更改,但是双归现在可能会在类开始时使用额外的参数而不是聚餐。
子类都这样做:
class Server(SimpleXMPLRPCServer):
def __init__(self, port=1234):
host = get_ip()
SimpleXMLRPCServer.__init__(self,(host, port))
并且 main() 调用是: Server(*sys,argv[:1])