【问题标题】:how do I monitor stdout with subprocess in python?如何在 python 中使用子进程监控标准输出?
【发布时间】:2010-10-06 06:01:44
【问题描述】:

我有一个 linux 应用程序,它使用标准输入从命令行以交互方式运行以接受命令。我编写了一个包装器,使用子进程在应用程序处于后台时访问标准输入。我现在可以使用 p.stdin.write(command) 向它发送命令,但是我该如何监控它的响应呢?

【问题讨论】:

标签: python subprocess


【解决方案1】:

p.stdout 读取以访问进程的输出。

根据进程的作用,您可能必须小心确保不会阻塞p.stdout,而p 反过来会阻塞其stdin。如果您确定每次写入时都会输出一行,则可以像这样简单地交替循环:

while still_going:
    p.stdin.write('blah\n')
    print p.stdout.readline()

但是,如果输出比较零星,您可能需要查看select 模块,以便以更灵活的方式在读取和写入之间交替。

【讨论】:

  • 我在理解如何使用 select 时遇到了一些麻烦。你知道任何与我的情况相关的例子吗?
  • @dpcd 有几种不同的方法可以使用 select,这取决于您的代码的结构,哪种方法最好。两种主要模式是“阻塞直到这些文件中的任何一个变得可写......然后告诉我哪些是”和“不要阻塞,只是告诉我数据是否可用。这样我就不会意外阻塞我的进程通过在没有准备好数据的文件上调用 read()"
  • @dpcd 哦,Python 的 select() 是标准 POSIX select() 的一个非常薄的包装器。您在谷歌搜索选择时会找到的所有基于 C 的示例都适用于 python 和 C 几乎相同(python 只返回列表而不是位图)。那里有很多示例和教程。
猜你喜欢
  • 2022-01-04
  • 2013-03-01
  • 2020-03-03
  • 2011-08-29
  • 2013-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多