gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 00:30:32 24 4
gpt4 key购买 nike

我正在使用 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,在那里它会发现进程实际上已经终止并中断循环。

最佳答案

是的,使用 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

关于Python:如何窥视 pty 对象以避免阻塞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6422016/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com