Запуск новых процессов - обычная задача на любом языке программирования и очень распространенная на языке высокого уровня, таком как Python.
Модуль subprocess позволяет создавать новые процессы, подключаться к их каналам ввода/вывода/ошибок и получать их коды возврата. Этот модуль предназначен для замены нескольких старых модулей и функций: os.system и os.spawn*.
Улучшение в Python 3.13. Модуль
subprocessиспользуетos.posix_spawn()в большем количестве ситуаций, включая значение по умолчанию, гдеclose_fds=Trueна многих современных платформах. Это должно обеспечить заметное увеличение производительности при запуске процессов во FreeBSD и Solaris.
Рекомендуемый подход к вызову подпроцессов заключается в использовании функции subprocess.run() для всех случаев использования, которые она может обработать. Для более сложных вариантов использования базовый интерфейс subprocess.Popen() можно использовать напрямую.
Функция subprocess.run() была добавлена в Python 3.5. Если необходимо сохранить совместимость с устаревшими версиями API, то смотрите раздел "Устаревшие функции модуля subprocess".
Внимание! Пользователям и администраторам серверов, которые пишут приложения под linux, рекомендуется обратить внимание на сторонний модуль sh. Модуль sh - это удобная, простая в использовании и полноценная замена встроенного модуля subprocess.
Функция run() модуля subprocess запускает команду с аргументами, ждет завершения команды, а затем возвращает экземпляр CompletedProcess() с результатами работы.
Объект `CompletedProcess()` модуля `subprocess` возвращает значение из `subprocess.run()`, представляющее завершенный процесс.
В этом разделе представлены специальные значения, которые могут принимать аргументы `stdin`, `stdout` или `stderr` модуля `subprocess`.
Для поддержки широкого спектра вариантов использования функций модуля принимают большое количество необязательных аргументов. Для большинства типичных случаев использования, многие из этих аргументов могут быть безопасно оставлены со значениями по умолчанию.
Класс Popen() модуля subprocess выполняет дочернюю программу в новом процессе. В POSIX класс использует os.execvp() подобное поведение для выполнения дочерней программы. В Windows класс использует функцию Windows CreateProcess().
При вызове subprocess.Popen() возвращает объект Popen, который имеет методы, описанные ниже. Материал дает описание всех методов объекта Popen, принимаемых аргументов, а так же предлагает примеры использования в коде Python.
Класс `STARTUPINFO()` модуля `subprocess` используется в аргументе `startupinfo` при создании `subprocess.Popen()`, через который осуществляется частичная поддержка структуры Windows `STARTUPINFO`.
В этом разделе представлены исключения, специфичные для модуля `subprocess`.
Модуль subprocess предоставляет следующие константы, используемые в помощнике Windows.
До Python-3.5 эти три функции включали высокоуровневый API для модуля `subprocess`. Теперь вместо них можно использовать функцию `subprocess.run()`