有没有一种方法来轮询从subprocess.Popen返回的文件句柄?
-
22-08-2019 - |
题
说我写:
from subprocessing import Popen, STDOUT, PIPE
p = Popen(["myproc"], stderr=STDOUT, stdout=PIPE)
现在,如果我做
line = p.stdout.readline()
我的程序等待直到子输出下一行。
有没有什么魔法我可以做p.stdout
这样我就可以读取输出,如果它的存在,但只要继续以其他方式?我正在寻找类似Queue.get_nowait()
我知道我可以创建读书p.stdout
一个线程,但是让我们假设我不能创建新的线程。
解决方案
使用select
模块在Python的标准库,请参阅 http://docs.python.org/库/ select.html 。 select.select([p.stdout.fileno()], [], [], 0)
立即返回一个元组,其项目有三个列表:第一种是将非空,如果有什么东西在该文件上描述读
其他提示
使用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()
不隶属于 StackOverflow