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-loop
時々ブロックすることを除いて、すべて正常に動作します。これは、行print stdout.readline()
が から何かが読み取られるのを待っているためですstdout
。しかし、プログラムが既に終了している場合、そこにある私の小さなスクリプトは永遠にハングアップします。
私の質問は次のとおりです。stdout
オブジェクトを覗き込んで、読み取り可能なデータがあるかどうかを確認する方法はありますか? そうでない場合はwhile-loop
、プロセスが実際にすでに終了していることを発見し、ループを中断するまで続行する必要があります。