Я прочитал функции, предоставляемые подпроцессом - call, check_call, check_output, и понял, как каждый работает и отличается функциональностью друг от друга. В настоящее время я использую check_output, поэтому я могу получить доступ к stdout и использовать "try block", чтобы поймать исключение, следующим образом:
# "cmnd" is a string that contains the command along with it arguments.
try:
cmnd_output = check_output(cmnd, stderr=STDOUT, shell=True, timeout=3, universal_newlines=True);
except CalledProcessError:
print("Status : FAIL")
print("Output: \n{}\n".format(cmnd_output))
Проблема, с которой я сталкиваюсь, - это когда генерируется исключение, "cmnd_output" не инициализирован и не имеет доступа к stderr, и появляется следующее сообщение об ошибке:
print("Output: \n{}\n".format(cmnd_output))
UnboundLocalError: local variable 'cmnd_output' referenced before assignment
Я думаю, это потому, что исключение заставляет "check_output" немедленно освобождаться без дальнейшей обработки, а также назначение "cmnd_output" в блоке try. Пожалуйста, поправьте меня, если я ошибаюсь.
Есть ли способ получить доступ к stderr (это нормально, если он отправлен в stout) и иметь доступ к коду выхода. Я могу вручную проверять пропуск/сбой на основе кода выхода без исключения.
Спасибо, Ахмед.