Постоянно печатать вывод подпроцесса во время работы процесса - PullRequest
159 голосов
/ 11 декабря 2010

Для запуска программ из моих Python-скриптов я использую следующий метод:

def execute(command):
    process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    output = process.communicate()[0]
    exitCode = process.returncode

    if (exitCode == 0):
        return output
    else:
        raise ProcessException(command, exitCode, output)

Поэтому, когда я запускаю процесс, подобный Process.execute("mvn clean install"), моя программа ждет, пока процесс не завершится, и только тогда я получаю полный вывод моей программы. Это раздражает, если я запускаю процесс, который занимает некоторое время.

Могу ли я позволить моей программе записывать выходные данные процесса построчно, опрашивая выходные данные процесса до его завершения в цикле или что-то в этом роде?

** [EDIT] Извините, я не очень хорошо искал, прежде чем опубликовать этот вопрос. Потоки на самом деле ключ. Здесь нашел пример, который показывает, как это сделать: ** Подпроцесс Python. Открыть из потока

Ответы [ 12 ]

0 голосов
/ 18 апреля 2019

В Python 3.6 я использовал это:

import subprocess

cmd = "command"
output = subprocess.call(cmd, shell=True)
print(process)
0 голосов
/ 20 июля 2018

Это работает по крайней мере в Python3.4

import subprocess

process = subprocess.Popen(cmd_list, stdout=subprocess.PIPE)
for line in process.stdout:
    print(line.decode().strip())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...