Содржина на објавата
Функция subprocess.check_output() удобна, когда нужно просто получить аутпут процесса. info = subprocess.check_output(cmd, text=True) Но вы не сможете таким образом получить аутпут процесса который завершился с ненулевым кодом выхода. Вместо этого у вас выбрасывается исключение CalledProcessError: Command '[...]' returned non-zero exit status 1. Не так давно я столкнулся с этой ситуацией, когда процесс, будучи запущенным с флагом --help, вполне штатно печатает в аут нужную информацию но выходит с кодом 1. И это для него нормальное поведение. За генерацию исключения отвечает аргумент check, который по умолчанию равен False но именно в check_output он равен True и не может быть переопределён при вызове. Нет, это не недосмотр разрабочтков и вам не потребуется искать обходные пути. Дело в том, что вся полезная нагрузка в таких случаях находится в классе исключения. Классы TimeoutExpired и CalledProcessError имеют ряд атрибутов, которые хранят всю нужну инфу. Например, вызванная команда (cmd), код выхода (returncode) и то что мы ищем - аутпут процесса (output) Итого, базовая фукнция для захвата аутпута для любого кода выхода будет выглядеть как-то так: def get_proc_output(cmd): try: return subprocess.check_output(cmd, text=True) except subprocess.CalledProcessError as e: return e.output #tricks