我正在pty读取不阻塞这样的进程的标准输出:
pty
import os import pty import subprocess master, slave = pty.openpty() p = subprocess.Popen(cmd, stdout = slave) stdout = os.fdopen(master) while True: if p.poll() != None: break print stdout.readline() stdout.close()
一切正常,除了while-loop偶尔会阻塞。这是由于该行print stdout.readline()正在等待从中读取内容stdout。但是,如果程序已经终止,那么我在那里的小脚本将永远挂起。
while-loop
print stdout.readline()
stdout
我的问题是:是否可以窥视stdout对象并检查是否有可读取的数据?如果不是这种情况,则应继续进行操作while- loop,直到发现该过程实际上已经终止并中断循环。
while- loop
是的,请使用选择模块的民意调查:
import select q = select.poll() q.register(stdout,select.POLLIN)
并在一段时间内使用:
l = q.poll(0) if not l: pass # no input else: pass # there is some input