Тесты Пообщаться с GPT Протестировать код
Программирование Аналитика Дизайн Маркетинг Управление проектами
21 Июл 2023
3 мин
4862

Как работать с модулем subprocess в Python

Пройдите тест, узнайте какой профессии подходите

Изучите основы работы с модулем subprocess в Python для управления процессами и взаимодействия с системными командами.

Модуль subprocess позволяет вам запускать новые процессы, подключаться к их входным/выходным/ошибочным каналам и получать их возвращаемые значения. В этой статье мы познакомимся с основами работы с модулем subprocess в Python.

Освойте Python на курсе от Skypro. Вас ждут 400 часов обучения и практики (достаточно десяти часов в неделю), подготовка проектов для портфолио, индивидуальная проверка домашних заданий и помощь опытных наставников. Получится, даже если у вас нет опыта в IT.

Создание процесса

Для создания нового процесса используйте функцию subprocess.run(). Вот пример запуска системной команды ls:

import subprocess

result = subprocess.run(["ls"])

Передайте команду и ее аргументы в виде списка строк. В этом примере мы передаем только одну строку, так как ls не требует дополнительных аргументов.

Получение вывода

Для того чтобы получить вывод команды, укажите параметр capture_output=True:

import subprocess

result = subprocess.run(["ls"], capture_output=True)
print(result.stdout)

result.stdout будет содержать вывод команды в виде байтовой строки. Если вы хотите получить текстовую строку, используйте метод decode():

print(result.stdout.decode())

Изучайте Python на онлайн-курсе от Skypro «Python-разработчик». Программа рассчитана на новичков без опыта программирования и технического образования. Курс проходит в формате записанных коротких видеолекций. Будет много проверочных заданий и мастер-классов. В конце каждой недели — живая встреча с экспертами в разработке для ответов на вопросы и разбора домашек.

Обработка ошибок

По умолчанию, если команда завершится с ошибкой, функция subprocess.run() возвратит объект с информацией об ошибке, но не вызовет исключение. Чтобы изменить это поведение, укажите параметр check=True:

import subprocess

try:
    result = subprocess.run(["ls", "non_existent_directory"], capture_output=True, check=True)
except subprocess.CalledProcessError as e:
    print(f"An error occurred: {e}")

Теперь, если команда завершится с ошибкой, будет вызвано исключение subprocess.CalledProcessError.

Работа с входными данными

Чтобы передать входные данные в команду, используйте параметр input:

import subprocess

input_data = "Hello, world!"
result = subprocess.run(
    ["echo"], input=input_data.encode(), capture_output=True
)
print(result.stdout.decode())

Не забудьте преобразовать входные данные в байтовую строку с помощью метода encode().

На курсе Skypro «Python-разработчик» освоите основные инструменты программирования, получите опыт на реальных проектах и сможете стартовать в профессии уверенным новичком. Преподаватели — практикующие программисты с большим опытом, а в центре карьеры помогут составить цепляющее резюме и подготовиться к собеседованию.

Использование контекстных менеджеров

С помощью контекстных менеджеров можно более удобно работать с процессами, которые требуют длительного времени выполнения:

import subprocess

with subprocess.Popen(["sleep", "5"]) as proc:
    try:
        proc.wait(timeout=3)
    except subprocess.TimeoutExpired:
        proc.terminate()
        proc.wait()

В этом примере мы запускаем команду sleep, которая выполняется в течение 5 секунд. Однако, мы ждем ее выполнения только 3 секунды и затем прерываем процесс с помощью метода terminate().

Теперь вы знакомы с основами работы с модулем subprocess в Python. Используйте эти знания для создания мощных и гибких инструментов, которые могут взаимодействовать с другими процессами и системными командами. Удачи вам в изучении Python! 😉

Добавить комментарий