Existe uma maneira para consultar um identificador de arquivo retornado de subprocess.Popen?

votos
4

Digamos que eu escrevo isto:

from subprocessing import Popen, STDOUT, PIPE
p = Popen([myproc], stderr=STDOUT, stdout=PIPE)

Agora, se eu faço

line = p.stdout.readline()

meu programa de espera até que o subprocesso saídas a próxima linha.

Existe alguma magia que posso fazer para p.stdoutpara que eu pudesse ler a saída se ele está lá, mas apenas continuar o contrário? Eu estou procurando algo comoQueue.get_nowait()

Eu sei que eu posso simplesmente criar um segmento para leitura p.stdout, mas vamos supor que eu não pode criar novos tópicos.

Publicado 19/05/2009 em 15:33
fonte usuário
Em outras línguas...                            


2 respostas

votos
8

Utilize p.stdout.read(1)este irá ler caractere por caractere

E aqui está um exemplo completo:

import subprocess
import sys

process = subprocess.Popen(
    cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE
)

while True:
    out = process.stdout.read(1)
    if out == '' and process.poll() != None:
        break
    if out != '':
        sys.stdout.write(out)
        sys.stdout.flush()
Respondeu 19/05/2009 em 15:36
fonte usuário

votos
5

Use o selectmódulo na biblioteca padrão do Python, consulte http://docs.python.org/library/select.html . select.select([p.stdout.fileno()], [], [], 0)imediatamente retorna uma tupla cujos itens são três listas: a primeira vai ser não-vazia, se há algo para ler sobre esse descritor de arquivo.

Respondeu 19/05/2009 em 15:42
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more