Найти в Дзене
Властелин машин

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

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

Мостиком для взаимодействия 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