Python Glossary English

все 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Сообщить о неточности