its*_*dok 4 python subprocess pipe
说我写这个:
from subprocessing import Popen, STDOUT, PIPE
p = Popen(["myproc"], stderr=STDOUT, stdout=PIPE)
Run Code Online (Sandbox Code Playgroud)
现在,如果我这样做
line = p.stdout.readline()
Run Code Online (Sandbox Code Playgroud)
我的程序一直等到子进程输出下一行.
有没有什么魔法可以p.stdout让我可以读取输出,如果它在那里,但只是继续吗?我正在寻找类似的东西Queue.get_nowait()
我知道我可以创建一个读取线程p.stdout,但我们假设我无法创建新线程.
使用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()
Run Code Online (Sandbox Code Playgroud)
select在Python的标准库中使用该模块,请参阅http://docs.python.org/library/select.html. select.select([p.stdout.fileno()], [], [], 0)立即返回一个元组,其项目是三个列表:如果在该文件描述符上有东西可读,则第一个元素将变为非空.