Wol*_*tan 5 python stdout popen pty peek
我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()
Run Code Online (Sandbox Code Playgroud)
一切都很好,除了while-loop偶尔块.这是因为线路print stdout.readline()正在等待要读取的内容stdout.但如果该程序已经终止,我的小脚本将永远挂起.
我的问题是:有没有办法窥视stdout对象并检查是否有可读取的数据?如果不是这种情况,它应该继续通过while-loop它将发现该进程实际已经终止并打破循环的地方.
Dan*_* D. 11
是的,使用选择模块的民意调查:
import select
q = select.poll()
q.register(stdout,select.POLLIN)
Run Code Online (Sandbox Code Playgroud)
并在使用时:
l = q.poll(0)
if not l:
pass # no input
else:
pass # there is some input
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3819 次 |
| 最近记录: |