我创建了一个函数,用于将数据发送到石墨服务器。它在执行时将度量名称,值和时间戳发送到石墨服务器:
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())”)
有人知道为什么它不起作用吗? 谢谢。
答案 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)