Найти тему
Властелин машин

Запуск инструкций командной строки из Python

Оглавление

Мостиком для взаимодействия Python и командной строки служит модуль subprocess. С его помощью можно выполнить команду и получить результат ее работы прямо из кода. Предпочтительным способом запуска является функция run.

command

По умолчанию первым аргументом run передается список из команды и ее параметров. Этого достаточно для запуска:

shell

Также можно задать первый аргумент как строку, но тогда нужно указать флаг shell=True:

-2

capture_output

Опционально можно перехватить потоки вывода и ошибок путем установки флага capture_output=True:

-3

text

В stdout и stderr по умолчанию возвращается байтовые строки, которые надо декодировать. Иначе можно установить флаг text:

-4

encoding

По умолчанию декодирование происходит с кодировкой, которую можно получить так:

-5

Иначе можно задать свою кодировку в параметре encoding.

timeout

Аргумент timeout задает максимальное время (в секундах) ожидания выполнения команды, после выбрасывается исключение TimeoutExpired:

-6

check

Если установить флаг check, то при ненулевом коде возврата будет генерироваться исключение CalledProcessError:

-7

input

В параметре input можно задать значение, которое будет передано в stdin:

-8

Popen

Внутри run обращается к объекту класса Popen, который обладает более гибкими, но и сложными настройками:

-9

Интерфейс вызова через класс Popen немного отличается. Главное, что посредством вызова метода communicate запускается дочерней процесс, которому в stdin отправляются данные и считывается результат из stdout и stderr. Для взаимодействия с потоками ввода/вывода указывайте в соответствующих параметрах значение PIPE (метод run так и поступает при capture_output=True).

-10

Наука
7 млн интересуются