所以我想从 tcpdump 获取所有数据并在未来添加一些逻辑。 子流程的管道我还没有这样的问题。 我编写代码并并行运行 tcpdump 和 run.py。
运行.py:
from subprocess import Popen, PIPE
# process = Popen(['/usr/bin/sudo', '/usr/sbin/tcpdump', '-i', 'wlan0'], bufsize=1, stdout=PIPE, stderr=PIPE)
process = Popen('sudo tcpdump -i wlan0', bufsize=1, universal_newlines=True, shell=True, stdout=PIPE, stderr=PIPE)
while True:
print(process.stdout.readline())
输出如下所示: 我为 bufsize 和其他尝试了不同的值,但行为没有改变。 如何使用 Subprocess.Popen 获得与 tcpdump 一样快的输出?
请您参考如下方法:
是stdio在tcpdump进程中的缓冲。
默认情况下,stdio 在重定向流上将缓冲模式设置为 _IOFBF(full)。
幸运的是 tcpdump 有 -l 选项,可以将模式切换到行缓冲:
process = Popen('sudo tcpdump -l -i wlan0', bufsize=1, universal_newlines=True,
shell=True, stdout=PIPE, stderr=PIPE)
Andrea 的解决方案也适用,但我的解决方案也适用于 Windows。
