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

标签 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接收值的输出。知道导致statsD接收随机值但在通过nc(netcat)命令发送时能正常工作的python程序中的错误是什么吗?

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: {},

关于python - 如何使用python发送nc类似命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46161491/

相关文章:

python - 如何从另一个目录运行模块?

python - 使用包装在 python2.7 子进程中的 wget 永远运行

sockets - 在发送电子邮件之前确定 TLS 支持

node.js - net::ERR_CONNECTION_REFUSED socket.io

网络游戏的Java多线程socket编程

python - 使用 Python 上传到 Sharepoint 后 Excel 文件损坏

python - 如何使用 Biopython 查找蛋白质的核苷酸序列?

python - 在外键上缓存 Django SQL 查询

Pythonic 的写法属于两组函数

python - 根据限制从右开始用单词拆分字符串