1

读取子进程和标准输出的正确方法是什么

这是我的文件:

traffic.sh
code.py

交通.sh:

sudo tcpdump -i lo -A | grep Host:

代码.py:

proc = subprocess.Popen(['./traffic.sh'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
# Do some network stuff like ping places, send an email, open a few web pages and wait for them to finish loading
# Stop all traffic and make sure its over
data = proc.stdout.read()
proc.kill()

上面的代码有时有效,有时无效。

它失败的次数是由于卡在 proc.stdout.read() 上。

我遵循了一堆示例,这些示例建议为 proc 设置线程和队列,并在 proc 写入时读取队列。然而,这个投票结果是断断续续的,因为它是如何运作的。

我觉得我在杀戮和阅读方面做错了什么。因为我可以保证当我拨打电话时,lo 上没有发生任何通信,因此,traffic.sh 根本不应该打印出任何东西。

那为什么读阻塞。

线程的任何干净替代品?

编辑 我也试过这个,希望读取不会再阻塞,因为进程将被终止

proc = subprocess.Popen(['./traffic.sh'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
# Do some network stuff like ping places, send an email, open a few web pages and wait for them to finish loading
# Stop all traffic and make sure its over
proc.kill()
data = proc.stdout.read()
4

0 回答 0