Python:如何窥视pty对象以避免阻塞?

我正在使用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

相关文章

功能概要:(目前已实现功能)公共展示部分:1.网站首页展示...
大体上把Python中的数据类型分为如下几类: Number(数字) ...
开发之前第一步,就是构造整个的项目结构。这就好比作一幅画...
源码编译方式安装Apache首先下载Apache源码压缩包,地址为ht...
前面说完了此项目的创建及数据模型设计的过程。如果未看过,...
python中常用的写爬虫的库有urllib2、requests,对于大多数比...