Я использую 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
иногда блокируется. Это связано с тем, что строка print stdout.readline ()
ожидает чтения из stdout
. Но если программа уже завершена, мой маленький скрипт зависнет навсегда.
Мой вопрос: есть ли способ заглянуть в объект stdout
и проверить, есть ли данные, доступные для чтения? Если это не так, он должен продолжить выполнение цикла while
, где он обнаружит, что процесс на самом деле уже завершен, и прервет цикл.