Мостиком для взаимодействия Python и командной строки служит модуль subprocess. С его помощью можно выполнить команду и получить результат ее работы прямо из кода. Предпочтительным способом запуска является функция run.
command
По умолчанию первым аргументом run передается список из команды и ее параметров. Этого достаточно для запуска:
shell
Также можно задать первый аргумент как строку, но тогда нужно указать флаг shell=True:
capture_output
Опционально можно перехватить потоки вывода и ошибок путем установки флага capture_output=True:
text
В stdout и stderr по умолчанию возвращается байтовые строки, которые надо декодировать. Иначе можно установить флаг text:
encoding
По умолчанию декодирование происходит с кодировкой, которую можно получить так:
Иначе можно задать свою кодировку в параметре encoding.
timeout
Аргумент timeout задает максимальное время (в секундах) ожидания выполнения команды, после выбрасывается исключение TimeoutExpired:
check
Если установить флаг check, то при ненулевом коде возврата будет генерироваться исключение CalledProcessError:
input
В параметре input можно задать значение, которое будет передано в stdin:
Popen
Внутри run обращается к объекту класса Popen, который обладает более гибкими, но и сложными настройками:
Интерфейс вызова через класс Popen немного отличается. Главное, что посредством вызова метода communicate запускается дочерней процесс, которому в stdin отправляются данные и считывается результат из stdout и stderr. Для взаимодействия с потоками ввода/вывода указывайте в соответствующих параметрах значение PIPE (метод run так и поступает при capture_output=True).