В документации по подпроцессам 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 голосов.Поэтому я не уверен, что он должен работать или нет.Может, чего-то не хватает половине из нас?