4

说我写这个:

from subprocessing import Popen, STDOUT, PIPE
p = Popen(["myproc"], stderr=STDOUT, stdout=PIPE)

现在如果我这样做

line = p.stdout.readline()

我的程序一直等到子进程输出下一行。

有什么魔法我可以做的,p.stdout这样我就可以读取输出(如果有的话),否则就继续?我正在寻找类似的东西Queue.get_nowait()

我知道我可以创建一个阅读线程p.stdout,但假设我不能创建新线程。

4

2 回答 2

8

使用p.stdout.read(1)它将逐个字符读取

这是一个完整的例子:

import subprocess
import sys

process = subprocess.Popen(
    cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE
)

while True:
    out = process.stdout.read(1)
    if out == '' and process.poll() != None:
        break
    if out != '':
        sys.stdout.write(out)
        sys.stdout.flush()
于 2009-05-19T14:36:21.523 回答
5

使用selectPython 标准库中的模块,请参阅http://docs.python.org/library/select.htmlselect.select([p.stdout.fileno()], [], [], 0)立即返回一个元组,其项目是三个列表:如果该文件描述符上有要读取的内容,第一个将是非空的。

于 2009-05-19T14:42:41.230 回答