加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

使用Python xmlrpclib与unix域套接字?

发布时间:2020-12-16 23:33:08 所属栏目:Python 来源:网络整理
导读:我正在尝试与supervisord进行交互,我想通过一个unix套接字(这是一个共享的主机环境)来谈论它. 我迄今为止所尝试的是: import xmlrpclibserver = xmlrpclib.ServerProxy('unix:///path/to/supervisor.sock/RPC2')Traceback (most recent call last): File "s
我正在尝试与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()

如果没有用,这里是一个更新的代码版本here:

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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读