将数据管道传输到Raspberry Pi / Raspbian OS上的Python程序

时间:2015-03-16 07:34:33

标签: pipe raspberry-pi

伙计们,我正在监视来自我的某个互联网设备的流量。我已经将Raspberry Pi设置为桥梁。当我运行这个脚本时(保存并设置为可执行文件" spy")

sudo tcpdump -A -n -p -l -i eth0 -s0 -w - tcp dst port 80 | stdbuf -oL strings -n10

我在终端屏幕上看到了感兴趣的记录:

id=11824&mt=a&length=A0580&density=A018600000&battery=normal&watts=4
id=04382&mt=b&length=A0970&density=A005111112&battery=normal&watts=4"
id=02606&mt=c&length=A0770&density=A005800000&battery=normal&watts=4'
id=02174&mt=d8&length=A0990&density=A005222224&battery=normal&watts=4+
id=11824&mt=a&length=A0580&density=A018600000&battery=normal&watts=4/

我创建了这个简单的Python程序来显示数据。

#!/usr/bin/env python
import sys
# test data
#f = open('/mnt/usbdrive/output/data.txt', 'r')
i=0
try:
#  for line in f:
  for line in sys.stdin:
    i=i+1
    print "\ninput line is \n--", line, "--\n"
except KeyboardInterrupt:
 print('Done', i)
# f.close()

如果我将这些记录剪切并过去到文件中并打开该文件进行阅读(注释行),它可以正常工作。但是,如果我尝试将脚本输出传递给我的Python程序,它只是设置在那里。

spy | python /mnt/usbdrive/pgms/TestPipe.py

当我在几分钟后分解脚本时,它说它已处理了许多记录/数据包,但Python输出表示没有读取任何行,即输出为零。

Raspberry Pi正在运行Raspian OS(Debian wheezy,我猜)。

我做错了什么?..... RDK

1 个答案:

答案 0 :(得分:0)

伙计......我找到答案,替换

 for line in sys.stdin:

while 1:
  line = sys.stdin.readline()

现在工作得很完美。不知道为什么我的原始代码不起作用,但.... RDK