В этой статье блога мы рассмотрим мощные возможности модуля Python subprocessи то, как его можно использовать для выполнения подпроцессов и создания конвейеров. Мы углубимся в различные методы и предоставим примеры кода, демонстрирующие их использование. К концу этого руководства вы получите четкое представление о выполнении подпроцессов и конвейерах в Python.
- Использование subprocess.run():
Функцияsubprocess.run()— это высокоуровневый метод выполнения команды и ожидания ее завершения. Он подходит для простого выполнения команд без необходимости использования каналов или сложного взаимодействия между процессами. Вот пример:
import subprocess
result = subprocess.run(['ls', '-l'], capture_output=True, text=True)
print(result.stdout)
- Создание подпроцессов с помощью 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)
- Создание конвейеров с помощью 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)
- Использование subprocess.check_output():
Функцияsubprocess.check_output()аналогичнаsubprocess.run(), но она возвращает выходные данные команды вместо завершенного объекта процесса. Вот пример:
import subprocess
output = subprocess.check_output(['ls', '-l'], text=True)
print(output)
- Обработка ошибок с помощью 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.