【发布时间】:2023-09-18 21:45:01
【问题描述】:
我想使用 subprocess.Popen() 和 subprocess.communicate() 从代码(在后台运行)读取已启动进程的持续输出
开始进程:
import subprocess
process_params = ['/usr/bin/tcpdump', '-n', 'dst port 80']
proc = subprocess.Popen(
process_params,
stdout=subprocess.PIPE, stderr=subprocess.PIPE
)
(stdout, stderr) = proc.communicate()
tcpdump 进程在后台运行,但 proc.communicate() 一直等到文件结束,只有当进程被杀死时才会产生一些输出。
>>> (stdout, stderr) = proc.communicate()
我想在进程产生输出时实现类似从进程的标准输出接收数据的功能。 我想我需要一些线程来查看是否从进程生成了一些输出,然后例如将其附加到日志文件中。 我不知道该怎么做,所以任何想法和建议都将不胜感激。
【问题讨论】:
-
看看我的回答*.com/a/49209440/7738328。
stdout流在线程中被捕获并在写入日志之前被修改。我认为这与您的用例相似?
标签: python subprocess stdout