Модуль 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! 😉
Перейти в телеграм, чтобы получить результаты теста





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