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

How to send nc similar command using python?

我正在尝试将参数 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: {},

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

我找到了答案。好像当我将发送值从计数器更改为仪表时,我得到了正确的值。所以,我认为问题不在我的 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: {},