Сокет Python для замены netcat в OpenTSDB

Я пытаюсь использовать сокет python вместо netcat для отправки метрических данных в OpenTSDB, но мне не повезло. Может ли кто-нибудь сообщить мне, возможно ли это сделать?

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("hostname", port))
s.send("put foo 123456789 12.9 host=dummy")

s.send(...) возвращает ненулевое значение, поэтому я предполагаю, что строка действительно была отправлена, просто OpenTSDB ее не распознает. Я попытался использовать netcat для отправки той же строки, и это работает.


person Sheng    schedule 21.03.2012    source источник
comment
Этот код верен в том, что касается настоящего Python. Вы можете убедиться, что он работает, запустив netcat -l <port> и указав там свой код Python. Вам нужно добавить новую строку в конец команды (например, "...host=dummy\n")?   -  person larsks    schedule 21.03.2012
comment
вы должны close() сокет, чтобы убедиться, что буферы вывода в конечном итоге сбрасываются.   -  person moooeeeep    schedule 21.03.2012
comment
Кажется, что добавление новой строки помогает.   -  person Sheng    schedule 21.03.2012


Ответы (1)


OpenTSDB анализирует строку за строкой, поэтому да, вам нужен \n в конце строки, которую вы отправляете.

person tsuna    schedule 25.03.2012