Модуль 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! 😉
Добавить комментарий