如何使用python发送nc类似的命令?

时间:2017-09-11 17:41:22

标签: python python-2.7 sockets netcat statsd

我正在尝试将参数foo及其值发送到statsD 使用python(python-2.7)程序。当我从命令行发送数据包时,使用下面的netcat命令,statsD获取foo:150的值,这是正确的。 echo "foo:150|c" | nc -u -w0 127.0.0.1 8125

但是,当我通过Python程序发送foo:150时,statsD会获得foo的大随机值,而不是150。 Python程序和statsD接收值输出如下。知道python程序中的错误是什么导致statsD接收随机值,但在通过nc(netcat)命令发送时工作正常?

PYTHON计划:

import socket
import random
UDP_IP = "127.0.0.1"
UDP_PORT = 8125
while(True):

        MESSAGE = "foo:150|c"       
        #print "message:", MESSAGE

        sock = socket.socket(socket.AF_INET, # Internet
                             socket.SOCK_DGRAM) # UDP
        sock.sendto(MESSAGE, (UDP_IP, UDP_PORT))

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

StatsD收到的值:

timer_data: {},
  counter_rates:
   { 'statsd.bad_lines_seen': 0,
     'statsd.packets_received': 19828,
     'statsd.metrics_received': 19828,
      foo: 2974200 },
  sets: {},

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

1 个答案:

答案 0 :(得分:0)

我想出了答案。好像当我将值从计数器发送到仪表时,我得到了正确的价值。所以,我认为问题不在我的python程序中,但statsD中的一些逻辑在作为计数器的一部分传递时给了我foo的意外随机值。

简而言之,当我从MESSAGE = "foo:150|c"更改为MESSAGE = "foo:150|g"时,我开始为foo获取正确的值。以下是输出:

{ counters:
   { 'statsd.bad_lines_seen': 0,
     'statsd.packets_received': 150383,
     'statsd.metrics_received': 150383 },
  timers: {},
  gauges: { foo: 150, 'statsd.timestamp_lag': 0 },
  timer_data: {},
  counter_rates:
   { 'statsd.bad_lines_seen': 0,
     'statsd.packets_received': 150383,
     'statsd.metrics_received': 150383 },
  sets: {},