【问题标题】:Wait for subprocess to print something to stdout, with Popen等待子进程使用 Popen 将内容打印到标准输出
【发布时间】:2016-02-20 18:58:53
【问题描述】:

我想对现有程序进行包装以创建可编程接口。这个想法是我想公开将适当的输入发送到子进程的函数,并返回一个与该进程的输入相对应的值。

但是,我不知道如何让我的界面等待程序返回一些东西。

这就是我所做的。

class ProcessWrapper:
    def __init__(self, process):
        self.proc = process
    def communicate(self, message):
        self.proc.stdin.write(message)
        while True:
            result = self.proc.stdout.readlines()
            if result: return result

但这似乎非常需要资源。有没有更好的办法?

【问题讨论】:

    标签: python-3.x subprocess popen


    【解决方案1】:

    readlines 是一个非阻塞函数,这意味着循环将尽可能快地执行,而不是等待进程的某些输出。

    这里应该改用readline,本质上是一样的功能,只是阻塞。

        def communicate(self, message):
            self.proc.stdin.send(message)
            return self.proc.stdout.readline()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-29
      • 1970-01-01
      • 2015-04-08
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      相关资源
      最近更新 更多