python - 将 Python xmlrpclib 与 unix 域套接字一起使用?

标签 python xml-rpc xmlrpclib unix-socket

我正在尝试与 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 肯定存在。 supervisord 使用 'unix:///path/to/supervisor.sock/RPC2' 形式的 URI,这就是我的灵感来源。文档不讨论 unix 套接字:http://docs.python.org/library/xmlrpclib.html .

这可能吗?我应该使用不同的库吗?

最佳答案

xmlrpclib 要求传递的 url 以 httphttps 开头。解决这个问题的方法是定义一个忽略该 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, object):
    def __init__(self, *args, **kwargs):
        self.socketpath = kwargs.pop('socketpath')
        super(UnixStreamTransport, self).__init__(*args, **kwargs)

关于python - 将 Python xmlrpclib 与 unix 域套接字一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11729159/

相关文章:

java - 在 XMLRPC 结果中使用 HashMap

python - Spyne/RPClib - 如何响应 ComplexModel?

python - 如何通过 odoo 中的 xmlrpc 为产品提供批号/序列号

python - 在 "in"之后有 2 个变量的循环

python - i += x > 0 是什么意思?

java - 渲染宏出错 - 无法初始化类 org.apache.xmlrpc.util.SAXParsers

python - 如何在 xmlrpc 服务器而不是客户端上查看回溯?

python - 在 Python 中过滤匹配向量所有值的数据框

python - flask:记录不会立即更新