我正在尝试与supervisord进行交互,我想通过一个unix套接字(这是一个共享的主机环境)来谈论它.
我迄今为止所尝试的是:
import xmlrpclib server = xmlrpclib.ServerProxy('unix:///path/to/supervisor.sock/RPC2') Traceback (most recent call last): File "<stdin>",line 1,in <module> File "/usr/local/lib/python2.7/xmlrpclib.py",line 1549,in __init__ raise IOError,"unsupported XML-RPC protocol" IOError: unsupported XML-RPC protocol
/path/to/supervisor.sock绝对存在. “unix:///path/to/supervisor.sock/RPC2”形式的URI由supervisord使用,这是我想到的地方.该文档不讨论unix套接字:http://docs.python.org/library/xmlrpclib.html.
这可能吗?我应该使用不同的图书馆吗?
解决方法
xmlrpclib要求传递的网址以http或https开头.这样做的方法是定义一个忽略该URL的自定义传输.以下是使用从主管传输的一些代码:
import supervisor.xmlrpc import xmlrpclib proxy = xmlrpclib.ServerProxy('http://127.0.0.1',transport=supervisor.xmlrpc.SupervisorTransport( None,None,serverurl='unix://'+socketpath)) proxy.supervisor.getState()
class UnixStreamhttpconnection(httplib.httpconnection,object): def __init__(self,*args,**kwargs): self.socketpath = kwargs.pop('socketpath') super(UnixStreamhttpconnection,self).__init__(*args,**kwargs) def connect(self): self.sock = socket.socket(socket.AF_UNIX,socket.soCK_STREAM) self.sock.connect_ex(self.socketpath) class UnixStreamTransport(xmlrpclib.Transport,**kwargs): self.socketpath = kwargs.pop('socketpath') super(UnixStreamTransport,**kwargs)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。