有没有方法可以轮询从返回的文件句柄子流程。Popen?

2024-09-29 21:58:15 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我写下这个:

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

如果我知道了

^{pr2}$

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

有没有什么魔法可以让我p.stdout这样我就可以读取输出(如果它在那里的话),但在其他情况下继续?我在找Queue.get_nowait()

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


Tags: fromimport程序进程魔法stderrstdout情况
2条回答

使用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()

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

相关问题 更多 >

    热门问题