Python, будучи универсальным языком программирования, предлагает широкий набор библиотек и модулей для упрощения сложных задач. Одним из таких мощных модулей является модуль «подпроцесс», который позволяет разработчикам создавать новые процессы, подключаться к их каналам ввода/вывода/ошибки и получать их коды возврата. В этой статье мы рассмотрим распространенные варианты использования модуля подпроцесса и предоставим практические примеры кода для демонстрации его возможностей.
Общие случаи использования:
Выполнение внешних команд:
Модуль подпроцесса позволяет нам выполнять внешние команды из скрипта Python. Это особенно полезно, когда нам нужно взаимодействовать с базовой операционной системой или использовать существующие инструменты командной строки. Давайте рассмотрим пример, в котором мы выполняем команду «ls», чтобы вывести список файлов в каталоге:
import subprocess # Execute the "ls" command result = subprocess.run(['ls'], capture_output=True, text=True) # Print the output print(result.stdout)
Выход:
file1.txt file2.txt file3.txt
Захват выходных данных и потоков ошибок:
Помимо выполнения команд, модуль подпроцесса позволяет нам захватывать выходные данные и потоки ошибок, сгенерированные исполняемым процессом. Это позволяет нам программно обрабатывать вывод или обрабатывать любые ошибки, которые могут возникнуть. Давайте расширим предыдущий пример, чтобы захватить поток ошибок:
import subprocess # Execute the "ls" command with an invalid option result = subprocess.run(['ls', '-z'], capture_output=True, text=True) # Print the output and error streams print(result.stdout) print(result.stderr)
Выход:
ls: illegal option -- z usage: ls [-ABCFGHLOPRSTUWabcdefghiklmnopqrstuwx1] [file ...]
Запуск команд оболочки:
Модуль подпроцесса также поддерживает выполнение команд оболочки. Это может быть полезно, когда нам нужно использовать возможности оболочки, такие как перенаправление ввода/вывода, конвейеры или расширения оболочки. Рассмотрим следующий пример, в котором команды оболочки используются для подсчета количества строк в файле:
import subprocess # Execute shell commands result = subprocess.run('cat file.txt | wc -l', capture_output=True, text=True, shell=True) # Print the output print(result.stdout)
Выход:
10
Управление вводом и выводом:
Модуль подпроцесса позволяет нам управлять входными и выходными потоками исполняемого процесса. Это позволяет нам передавать входные данные в процесс и фиксировать его выходные данные в режиме реального времени. Давайте посмотрим на пример, где мы используем ввод из файла и захватываем вывод построчно:
import subprocess # Execute a command with input from a file with open('input.txt', 'r') as f: result = subprocess.run(['grep', 'python'], input=f, capture_output=True, text=True) # Print the output line by line for line in result.stdout.splitlines(): print(line)
Выход:
Python is a powerful programming language. Python's simplicity and versatility make it popular among developers.
Заключение:
Модуль подпроцесса в Python предоставляет надежный и гибкий способ взаимодействия с внешними командами, управления потоками ввода/вывода и регистрации ошибок. Его способность выполнять команды оболочки и обрабатывать сложные сценарии делает его ценным инструментом для системной автоматизации, обработки данных и многого другого. Используя возможности модуля подпроцесса, разработчики могут добиться большего контроля и эффективности при работе с внешними процессами в своих приложениях Python.