Python подпроцесс выдал вывод или нет - PullRequest
2 голосов
/ 16 ноября 2010

Этот вопрос относится к:

python, подпроцесс: чтение выходных данных подпроцесса

Если P - это подпроцесс, запущенный с помощью команды, аналогичной

import subprocess

P = subprocess.Popen ("command", stdout=subprocess.PIPE)

мы можем прочитать вывод P, полученный с помощью P.stdout.readline ().Это блокирующее чтение, хотя.Как я могу проверить, готов ли вывод для чтения (без блокировки)?

Ответы [ 2 ]

0 голосов
/ 16 ноября 2010

Если вы используете * nix, вы можете использовать модуль select для опроса дескриптора файла stdout

import subprocess
import select
poller = select.epoll()

P = subprocess.Popen ("command", stdout=subprocess.PIPE)
poller.register(P.stdout, select.EPOLLHUP)

while True:
    #block indefinitely: timeout = -1
    #return immediately: timeout = 0
    for fd, flags in poller.poll(timeout=0)
        foo = P.stdout.readline()
    #do something else before the next poll
0 голосов
/ 16 ноября 2010
...