Я использую 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
, где он обнаружит, что процесс фактически уже завершен, и прервет цикл.