Python subprocess.run: таймаут, код выхода и вывод команды
Для запуска внешней команды в Python используйте subprocess.run с аргументами-списком, timeout и capture_output. Так приложение получает код завершения и вывод процесса, а зависшая команда ограничена по времени.
Рабочий пример
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()) # readycheck=True вызывает CalledProcessError при ненулевом коде, timeout ограничивает ожидание, а text=True возвращает строки вместо bytes. Для команд с потоком вывода используйте Popen отдельно.
Частый вопрос
Как получить stderr при ошибке?
Перехватите subprocess.CalledProcessError и прочитайте исключение .stderr. При capture_output=True stderr сохраняется даже при ненулевом exit code.