Python3插槽无效-石墨

时间:2018-08-02 14:19:19

标签: python-3.x sockets graphite

我创建了一个函数,用于将数据发送到石墨服务器。它在执行时将度量名称,值和时间戳发送到石墨服务器:

def collect_metric(metricname, value, timestamp):
   sock = socket.socket()
   sock.connect( ("localhost", 2003) )
   sock.send("%s %s %s\n" % (metricname, value, timestamp))
   sock.close()

以上函数在Python2中运行良好。我必须为Python3重写此函数。现在没有数据将发送到石墨。石墨/碳测井仪中没有测井仪条目或其他......

def collect_metric(metricname, value, timestamp):
   sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
   sock.connect( ("localhost", 2003) )
   metricname = metricname.encode()
   if type(value) == "str":
      value = value.encode()
   timestamp = timestamp.encode()
   message = bytearray()
   message = bytes(metricname+b" "+value+b" "+timestamp)
   sock.sendall(message)
   print(message.decode())
   sock.close()

我没有收到任何错误。同样在终端上,我得到了正确的格式/输出(请参阅“ print(message.decode())”)

有人知道为什么它不起作用吗? 谢谢。

2 个答案:

答案 0 :(得分:1)

您发送的消息末尾似乎缺少“\n”

message = bytes(metricname+b" "+value+b" "+timestamp)

应该是:

message = bytes(metricname+b" "+value+b" "+timestamp + '\n')

答案 1 :(得分:0)

字节数组没有任何编码。尝试这个: message = (metricname+" "+value+" "+timestamp).encode("UTF-8")

sock.send(messages)