【发布时间】:2021-10-01 13:49:51
【问题描述】:
我想使用subprocess.Popen 调用一个后台任务,它将在后台运行一个服务器,假设在某些事件(如传入的 http 消息)时打印一些有意义的消息。
我想获取这些日志并将它们与父进程合并,以便我可以观察整个流程,其中包括除此服务器之外的其他组件。
根据文档
PIPE 表示应该创建一个通往子级的新管道。
所以我尝试了后续调用,但未能跟踪子进程日志。
res = subprocess.Popen("python3 http_server.py",
shell=True,
stdin=PIPE,
stdout=PIPE,
stderr=STDOUT,
close_fds=True)
知道怎么解决吗?
【问题讨论】:
-
您对此有什么问题?你预计会发生什么?
-
我希望后台子进程的打印输出不断出现在父进程的标准输出中。
-
如果您不通过管道传输标准输出/标准输入,这不会“自动”发生吗?文本将转到同一个终端 - 但不是很好地排序。
-
是的,你是对的。所以这让我想到
subprocess.PIPE给你带来什么好处? -
如果您使用
PIPE,则输出存储在res.stdout中,它应该可以用作迭代器(例如在for循环中)。调查一下,如果你不能让它工作,然后问一个新问题。
标签: python subprocess stdout popen