Python 3.3+Исключенияисключение
subprocess.TimeoutExpired
модульные исключения
Исключение: дочерний процесс не уложился в timeout, переданный run, call, check_output или Popen.wait/communicate.
Синтаксис
except subprocess.TimeoutExpired as e: # e.cmd, e.timeout, e.output, e.stderr
run() перед тем как поднять его, убивает дочерний процесс, а Popen.wait(timeout) и communicate(timeout) — нет: процесс продолжает работать, и его надо добить proc.kill() и дочитать communicate(). Атрибуты output/stderr содержат bytes даже при text=True. Это не подкласс встроенного TimeoutError: except TimeoutError его пропустит.
Примеры
import subprocess, sys
cmd = [sys.executable, '-c', 'import time; time.sleep(5)']
try:
subprocess.run(cmd, timeout=0.5)
except subprocess.TimeoutExpired as e:
print(round(e.timeout, 1)) # → 0.5 — до 3.13 здесь лежало прошедшее время
print(issubclass(subprocess.TimeoutExpired, TimeoutError)) # → False
import subprocess, sys
p = subprocess.Popen([sys.executable, '-c', 'import time; time.sleep(5)'])
try:
p.wait(timeout=0.3)
except subprocess.TimeoutExpired:
print(p.poll()) # → None — процесс ещё жив
p.kill()
p.wait()
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности