读取子进程和标准输出的正确方法是什么
这是我的文件:
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()