首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >非阻塞子进程和捕获每个子进程的输出。

非阻塞子进程和捕获每个子进程的输出。
EN

Stack Overflow用户
提问于 2015-12-09 13:34:59
回答 1查看 1.6K关注 0票数 1

因此,我遇到了这种棘手的情况,我需要执行少量的子进程,并能够得到每个子进程的输出。这就是我用的自动取款机:

代码语言:javascript
运行
复制
output = Popen(cmd, stdout=PIPE, stderr=STDOUT)
output = output.communicate()[0]

如果有错误的话,也会给我带来错误。现在,我需要执行其中的10个,并能够得到每个输出。我在想,在不使用多线程的情况下,是否有一种顺利的方法可以做到这一点。

EN

回答 1

Stack Overflow用户

发布于 2015-12-09 14:09:43

subprocess.Popen异步启动子进程,只有communicate使操作同步。

所以你只需要首先启动你所有的子进程。然后,根据您希望如何处理它们的输出,您可以:

  • 如果需要以有序的方式处理输出,即显示来自cmd1的输出,那么cmd2,.只需对每个子命令使用communicatewait
  • 如果您需要在输出可用时立即进行处理,并且使用类似Linux或Unix的平台,则可以使用select模块。
  • 如果您需要在每个命令结束后立即处理输出,并且希望支持Windows,您只需在子进程上使用subprocess.poll循环,知道哪些已经完成。
  • 如果您需要更多,您可能不得不使用线程。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34180153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档