все Python 3Исключенияисключение
subprocess.CalledProcessError
модульные исключения
Исключение: дочерний процесс завершился с ненулевым кодом, а вызов просил это проверить (run с check=True, check_call, check_output).
Синтаксис
except subprocess.CalledProcessError as e: # e.returncode, e.cmd, e.stdout, e.stderr
Возбуждают его только «проверяющие» вызовы: run() без check=True, call() и Popen ненулевой код молча возвращают числом. Атрибуты stdout и stderr заполнены, лишь если вывод перехватывался (capture_output=True или check_output), иначе там None — и причину падения из исключения уже не достать. Это не OSError: если программы нет вовсе, прилетит FileNotFoundError, и except CalledProcessError его не поймает.
Примеры
import subprocess, sys
code = 'import sys; sys.stderr.write("нет файла"); sys.exit(3)'
try:
subprocess.run([sys.executable, '-c', code], check=True,
capture_output=True, text=True)
except subprocess.CalledProcessError as e:
print(e.returncode) # → 3
print(e.stderr) # → нет файла
import subprocess, sys
cmd = [sys.executable, '-c', 'import sys; sys.exit(2)']
r = subprocess.run(cmd) # без check исключения нет
print(r.returncode) # → 2
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности