python errno 23-套接字活动状态

python 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

我正试图使用此脚本向服务器发送两个查询,以获取以下信息:

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(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")