Popen.communicate захватить стандартный вывод от начала до времени ожидания, работает для некоторых - PullRequest
0 голосов
/ 02 июля 2019

В документации по подпроцессам python приведен пример получения выходных данных процесса с тайм-аутом: https://docs.python.org/3.6/library/subprocess.html#subprocess.Popen.communicate следующим образом:

proc = subprocess.Popen(...)
try:
    outs, errs = proc.communicate(timeout=15)
except TimeoutExpired:
    proc.kill()
    outs, errs = proc.communicate()

Я пробовал описанное выше и не смог перехватитьстандартный выход (запуска Django) после тайм-аута.Я вижу, что есть аналогичные вопросы о SO с ответами, которые ссылаются на приведенный выше код, например: https://stackoverflow.com/a/43522045/5506400

Завершил код вышеупомянутого ответа SO и запустил его:

import subprocess
proc = subprocess.Popen(
    ["ping", "192.168.1.150"],
    stdout=subprocess.PIPE,
    stderr=subprocess.PIPE,
    universal_newlines=True,
)
try:
    output, error = proc.communicate(timeout=2)
except subprocess.TimeoutExpired:
    proc.kill()
    output, error = proc.communicate()
print('outputs:', output) # output is ''
print('errs:', error)     # error is ''

Этот код также делаетне захватывать выходные данные с момента начала процесса до времени ожидания.Есть комментарии к сообщению, говоря, что это не работает, но также имеет 5 голосов.Поэтому я не уверен, что он должен работать или нет.Может, чего-то не хватает половине из нас?

...