【问题标题】:python subprocess not outputting all linespython子进程没有输出所有行
【发布时间】:2015-01-14 01:09:05
【问题描述】:

我正在使用 python 运行 tcpdump 以捕获来自我的手机的一些探测请求。 现在,我只是将它打印到控制台。

def dumpNexus(self):
        proc = subprocess.Popen(["sudo", "tcpdump", "-i", "mon.wlan0", "-e", "-s", "0", "type", "mgt", "subtype", "probe-req", "and", "ether host", "bc:f5:ac:f2:xx:xx"], stdout=subprocess.PIPE,)
        for line in iter(proc.stdout.readline,''):
            print proc.stdout.readline()

我的问题是,当我运行这个程序时,它不会打印出 tcpdump 正在写入的所有行。
如果我运行tcpdump 命令并将其输出与 python 程序进行比较,则 python 程序显示的数据包要少得多。

tcpdump 将声明它捕获了 28 个数据包,但只有 11 个通过子进程 stdout 输出。

任何想法为什么会发生这种情况?

谢谢

【问题讨论】:

  • 你给readline()打了两次电话,你期待什么?

标签: python subprocess stdout tcpdump


【解决方案1】:

问题是您调用了两次readline()。第一次在iter 内部,然后在循环内部,所以你最终忽略了iter 返回的行。解决方法是:

for line in iter(proc.stdout.readline, ''):
    print line

或者你可以简单地这样做:

for line in proc.stdout:
    print line

【讨论】:

【解决方案2】:

我相信对于这样的事情,您希望 tcpdump 处于“行缓冲模式” - 使用 -l 标志。

【讨论】:

  • 我想这就是我想要的!现在似乎工作正常。谢谢
猜你喜欢
  • 2016-11-19
  • 1970-01-01
  • 2016-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-03
  • 2019-04-26
相关资源
最近更新 更多