Освоение выполнения подпроцессов и конвейеров в Python: подробное руководство с примерами кода

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

  1. Использование subprocess.run():
    Функция subprocess.run() — это высокоуровневый метод выполнения команды и ожидания ее завершения. Он подходит для простого выполнения команд без необходимости использования каналов или сложного взаимодействия между процессами. Вот пример:
import subprocess
result = subprocess.run(['ls', '-l'], capture_output=True, text=True)
print(result.stdout)
  1. Создание подпроцессов с помощью subprocess.Popen():
    Функция subprocess.Popen()обеспечивает больший контроль над подпроцессами, позволяя вам взаимодействовать с ними через каналы. Вот пример:
import subprocess
process = subprocess.Popen(['grep', 'search_term'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, text=True)
output, _ = process.communicate('input_data')
print(output)
  1. Создание конвейеров с помощью subprocess.Popen() и Pipes:
    Вы можете создавать конвейеры, соединяя несколько подпроцессов вместе. Вот пример, демонстрирующий, как использовать subprocess.Popen()и каналы для создания конвейера:
import subprocess
grep_process = subprocess.Popen(['grep', 'search_term'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, text=True)
sed_process = subprocess.Popen(['sed', 's/old/new/'], stdin=grep_process.stdout, stdout=subprocess.PIPE, text=True)
output, _ = sed_process.communicate('input_data')
print(output)
  1. Использование subprocess.check_output():
    Функция subprocess.check_output()аналогична subprocess.run(), но она возвращает выходные данные команды вместо завершенного объекта процесса. Вот пример:
import subprocess
output = subprocess.check_output(['ls', '-l'], text=True)
print(output)
  1. Обработка ошибок с помощью subprocess.CalledProcessError:
    При использовании функций подпроцесса важно обрабатывать потенциальные ошибки. Исключение subprocess.CalledProcessErrorвозникает, если подпроцесс возвращает ненулевой статус завершения. Вот пример:
import subprocess
try:
    output = subprocess.check_output(['invalid_command'], text=True)
except subprocess.CalledProcessError as e:
    print(f"Command execution failed with return code {e.returncode}:\n{e.output}")

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

Не забудьте поэкспериментировать и изучить официальную документацию Python для получения более подробной информации о модуле subprocess.