gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 18:16:30 29 4
gpt4 key购买 nike

我正在尝试与 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com