我想通过subprocess.Popen()和subprocess.communicate()
从代码(在后台运行)中读取已启动进程的正在输出开始这个过程:
>>> (stdout, stderr) = proc.communicate()
tcpdump进程在后台运行,但proc.communicate()等到文件结束,只有当进程被终止时才会产生一些输出。
curl -s https://i.instagram.com/api/v1/users/USERID/info/ | jq -r .user.username
我希望在流程生成输出时从流程'stdout接收数据。 我想我需要一些线程来查看是否从进程生成了一些输出,然后将其附加到日志文件中。 我不知道该怎么做,所以任何想法和建议都会非常感激。
答案 0 :(得分:0)
tcpdump
可能正在缓冲其输出。它只会在具有要写入的数据(通常为8KB)的缓冲区时写入输出。这是不写入TTY的程序的常见行为。
Tcpdump有一个命令行选项来对其输出进行行缓冲。这使得它在每次具有完整的文本行时写入其输出。试试这个:
process_params = ['/usr/bin/tcpdump', '-l', '-n', 'dst port 80']
^^--Line buffer output
或者,查看您的系统上是否安装了名为stdbuf
或unbuffer
的程序。它们可用于调整另一个进程的缓冲行为。或者看看这些问题: