Как я могу захватить вывод stdout дочернего процесса? - PullRequest
9 голосов
/ 29 мая 2009

Я пытаюсь написать программу на Python, и мне говорят, чтобы запустить файл .exe. Когда этот файл .exe запускается, он выплевывает много данных, и мне нужно вывести определенную строку на экран. Я почти уверен, что мне нужно использовать subprocess.popen или что-то подобное, но я плохо знаком с подпроцессом и понятия не имею. У кого-нибудь есть простой способ сделать это?

Ответы [ 2 ]

24 голосов
/ 29 мая 2009

@ Решение Paolo идеально, если вы заинтересованы в выводе на печать после завершения процесса. Если вы хотите опрашивать вывод во время работы процесса, вы должны сделать это следующим образом:

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

while True:
    out = process.stdout.readline(1)
    if out == '' and process.poll() != None:
        break
    if out.startswith('myline'):
        sys.stdout.write(out)
        sys.stdout.flush()
19 голосов
/ 29 мая 2009

Примерно так:

import subprocess
process = subprocess.Popen(["yourcommand"], stdout=subprocess.PIPE)
result = process.communicate()[0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...