我正在使用pty来读取非阻塞这样的进程的stdout:
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循环偶尔阻塞外,一切正常.这是因为行打印stdout.readline()正在等待从stdout读取的内容.但如果该程序已经终止,我的小脚本将永远挂起.
我的问题是:有没有办法窥视stdout对象并检查是否有可读取的数据?如果不是这种情况,它应该继续通过while循环,它将发现该进程实际上已经终止并打破了循环.
最佳答案
是的,使用select module’s poll:
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。