python errno 23 - socket livestatus

时间:2014-07-14 06:45:55

标签: python sockets errno

我正在尝试使用此脚本向服务器发送两个查询,以获取MK Livestatus

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行,in    hostsB = s.send(“GET hosts \ nColumns:name \ n”)socket.error:   [Errno 32]破管

我认为错误与命令“s.shutdown(socket.SHUT_WR)”有关。但作者说,这是required。如果你删除这一行,你将得不到答案(超时?)。

如何发送两个查询?


所以......我写了一个完成这项工作的函数: - )

功能

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

1 个答案:

答案 0 :(得分:0)

所以......我写了一个完成这项工作的函数: - )

<强>功能

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