Запустите подпроцесс в python, и оба отобразят вывод в «реальном времени» и сохранят его в переменной - PullRequest
1 голос
/ 07 марта 2019

Я хотел бы иметь возможность запускать подпроцесс из кода Python и видеть результаты в режиме реального времени, а после завершения процесса выводить переменную

Прямо сейчас я делаю одно из двухвещи

1) Запустите подпроцесс с использованием subprocess.call, в этом случае я получаю вывод в режиме реального времени, но в конце у меня нет вывода в переменную (я хочу проанализировать его и извлечь из него значения)

2) Запустите подпроцесс, используя subprocess.check_output, в этом случае у меня есть вывод в переменной, но если я хочу увидеть его, я должен напечатать его «вручную»

Есть лиспособ собрать обе вещи "вместе"?

Надеюсь, это понятно, я могу добавить свой код, если вам нужно

Спасибо !!!

РЕДАКТИРОВАТЬ:

Это мой текущий код

enter image description here

Я добавил необязательный параметр тайм-аута (Значение по умолчанию 1200, а также имеет дело с оболочкой (По некоторым причинам те же командыэта работа в Linux не работает в Windows, если у меня нет полкиl = True) параметр "mode" - это тот, который я использую, чтобы дифференцировать случаи, когда я хочу вывод в "реальном времени", и мне не нужно анализировать его, а другие случаи

былиинтересно, есть ли более чистый и лучший способ добиться таких же результатов

Ответы [ 2 ]

0 голосов
/ 07 марта 2019
import subprocess
from subprocess import PIPE

comd = input('command here : ')
comds = comd.split(' ')
f = subprocess.run(comds, shell= True,stdout=PIPE, stderr=PIPE)
result = f.stdout.decode()
errors = f.stderr.decode()
0 голосов
/ 07 марта 2019

Предполагается, что вы пытаетесь запустить какую-то команду your_command Вы можете использовать следующее:

some_proc = subprocess.Popen(['your_command'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)

stdout=subprocess.PIPE выводит результат в случае успеха. После этого вы можете получить доступ к выводу следующим образом:

store_in_var = some_proc.stdout

Теперь вы можете разобрать ваш store_in_var

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...