Python subprocess.run: таймаут, код выхода и вывод команды

Категория: Python · Язык: Python · Обновлено:

Для запуска внешней команды в Python используйте subprocess.run с аргументами-списком, timeout и capture_output. Так приложение получает код завершения и вывод процесса, а зависшая команда ограничена по времени.

Рабочий пример

Python
import subprocess
import sys
r124 = subprocess.run(
    [sys.executable, "-c", "print('ready')"],
    capture_output=True, text=True, timeout=3, check=True)
print(r124.stdout.strip())  # ready

check=True вызывает CalledProcessError при ненулевом коде, timeout ограничивает ожидание, а text=True возвращает строки вместо bytes. Для команд с потоком вывода используйте Popen отдельно.

Частый вопрос

Как получить stderr при ошибке?

Перехватите subprocess.CalledProcessError и прочитайте исключение .stderr. При capture_output=True stderr сохраняется даже при ненулевом exit code.