等待子进程用 Popen 打印一些东西到标准输出

Wait for subprocess to print something to stdout, with Popen

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

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

这就是我所做的。

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

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

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

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

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