python errno 23-套接字活动状态
我正试图使用此脚本向服务器发送两个查询,以获取以下信息: live.pypython errno 23-套接字活动状态,python,sockets,errno,Python,Sockets,Errno,我正试图使用此脚本向服务器发送两个查询,以获取以下信息: live.py #!/usr/bin/python socket_path = "/tmp/run/live" import socket s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) s.connect(socket_path) # Get Hosts hosts = s.send("GET hosts\nColumns: name\n") s.shutdown(socke
#!/usr/bin/python
socket_path = "/tmp/run/live"
import socket
s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
s.connect(socket_path)
# Get Hosts
hosts = s.send("GET hosts\nColumns: name\n")
s.shutdown(socket.SHUT_WR)
hosts = s.recv(1024)
hosts = [ line.split(';') for line in hosts.split('\n')[:-1] ]
hostsB = s.send("GET hosts\nColumns: name\n")
s.close()
但我得到了这个错误:
回溯最近一次调用:文件live.py,第13行,在
hostsB=s.sendGET hosts\n列:名称\n套接字。错误:
[Errno 32]管道破裂
我认为错误与命令s.shutdownsocket.shutu WR有关。但作者说,这是。如果删除此行,您将不会得到应答超时
如何发送两个查询
解决方案
所以。。。我已经编写了一个函数来完成这项工作:- 作用
所以。。。我已经编写了一个函数来完成这项工作:- 作用
所以你关闭你的套接字进行写操作,然后再对它进行写操作?您希望它如何工作?顺便问一下,考虑到您显示的示例代码少于20行,哪一行对应于实际代码中的第21行?你能在你的问题中加上程序的实际错误吗?我不想关闭套接字-在你收到答案之前需要命令s.shutdownsocket.shutu WR。但我需要不止一个查询。第50行是一个问题和答案,第70行是另一个问题和答案。你为什么需要停止写作才能收到答案?您知道套接字是双向和全双工的,即它可以同时发送和接收。您现在可以运行此示例。WR并不意味着写>如果如何关闭\u WR,则不允许进一步发送->此代码对我来说一直不起作用。我不得不将“if lendata<1024:”一行改为“if lendata<1:”。这可能是因为python3或加载的checkmk服务器。我还使用了return-answer.decode'utf-8',因为我需要一个字符串而不是bytearray。
def sendQuery(query):
s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
s.connect(socket_path)
s.send(query)
s.shutdown(socket.SHUT_WR)
answer = ''
while True:
data = s.recv(1024)
answer += data
if len(data) < 1024:
break
s.close()
return answer
sendQuery("GET hosts\nColumns: name\n")
def sendQuery(query):
s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
s.connect(socket_path)
s.send(query)
s.shutdown(socket.SHUT_WR)
answer = ''
while True:
data = s.recv(1024)
answer += data
if len(data) < 1024:
break
s.close()
return answer
sendQuery("GET hosts\nColumns: name\n")