Python: Как заглянуть в объект pty, чтобы избежать блокировки?

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

5
задан Woltan 21 June 2011 в 07:49
поделиться