小编典典

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

python

我正在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。但是,如果程序已经终止,那么我在那里的小脚本将永远挂起。

我的问题是:是否可以窥视stdout对象并检查是否有可读取的数据?如果不是这种情况,则应继续进行操作while- loop,直到发现该过程实际上已经终止并中断循环。


阅读 175

收藏
2021-01-20

共1个答案

小编典典

是的,请使用选择模块的民意调查

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
2021-01-20