【问题标题】:how do I read everything currently in a subprocess.stdout pipe and then return?如何读取 subprocess.stdout 管道中当前的所有内容然后返回?
【发布时间】:2010-11-12 19:01:06
【问题描述】:

我正在使用 python 的 subprocess 模块通过 stdin 和 stdout 管道与程序交互。如果我在 stdout 上调用子进程 readline(),它会挂起,因为它正在等待换行符。

如何读取子流程实例的标准输出管道中的所有字符?如果重要的话,我在 Linux 中运行。

【问题讨论】:

    标签: python linux


    【解决方案1】:

    其他人好像也有同样的问题,可以看相关讨论here。

    如果您在 Linux 上运行,您可以使用 select 等待进程的标准输出上的输入。或者,您可以使用

    将进程的标准输出模式更改为非阻塞
    import fcntl, os 
    fcntl.fcntl(your_process.stdout, fcntl.F_SETFL, os.O_NONBLOCK)
    

    之后您可以使用 read() 循环,直到遇到换行符(如果您想一次处理一行输出)。

    【讨论】:

      【解决方案2】:

      您应该对一组字符使用 read() 循环。

      【讨论】:

      • 如果管道缓冲区中当前没有数据,read() 将阻塞
      猜你喜欢
      • 1970-01-01
      • 2022-11-21
      • 2013-04-24
      • 1970-01-01
      • 2019-06-03
      • 2015-04-11
      • 1970-01-01
      • 1970-01-01
      • 2012-05-09
      相关资源
      最近更新 更多