【问题标题】:Subprocess.Popen route child process stdout,stderr to parent processSubprocess.Popen 路由子进程 stdout,stderr 到父进程
【发布时间】: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


【解决方案1】:

尝试删除所有选项并仅将脚本提供给子进程。它应该在同一终端中显示子进程的所有日志。

res = subprocess.Popen("python3 http_server.py")

【讨论】:

    猜你喜欢
    • 2020-03-11
    • 1970-01-01
    • 2012-07-14
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 2011-04-22
    • 2012-03-16
    • 2011-07-07
    相关资源
    最近更新 更多