Модуль subprocess
Python предоставляет мощный способ создания новых процессов, взаимодействия с ними и управления их потоками ввода/вывода. Одним из распространенных требований является использование конвейеров символов (|) для подключения вывода одной команды в качестве входных данных для другой команды. В этой статье мы рассмотрим несколько методов реализации поддержки каналов с помощью модуля subprocess
в Python. Мы предоставим примеры кода для каждого метода, что позволит вам выбрать тот, который лучше всего соответствует вашим потребностям.
Метод 1: использование Shell=True и оператора конвейера
import subprocess
command1 = "ls -l"
command2 = "grep .txt"
cmd = f"{command1} | {command2}"
result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
print(result.stdout)
Метод 2: использование subprocess.Popen и Pipes
import subprocess
command1 = ["ls", "-l"]
command2 = ["grep", ".txt"]
p1 = subprocess.Popen(command1, stdout=subprocess.PIPE)
p2 = subprocess.Popen(command2, stdin=p1.stdout, stdout=subprocess.PIPE)
p1.stdout.close()
output = p2.communicate()[0]
print(output.decode())
Метод 3: использование subprocess.Popen и конвейера оболочки
import subprocess
command1 = "ls -l"
command2 = "grep .txt"
p1 = subprocess.Popen(command1, stdout=subprocess.PIPE, shell=True)
p2 = subprocess.Popen(command2, stdin=p1.stdout, stdout=subprocess.PIPE, shell=True)
p1.stdout.close()
output = p2.communicate()[0]
print(output.decode())
Метод 4. Использование символа вертикальной черты непосредственно в командах оболочки
import subprocess
cmd = "ls -l | grep .txt"
output = subprocess.check_output(cmd, shell=True)
print(output.decode())
В этой статье мы рассмотрели четыре различных метода поддержки каналов символов в модуле Python subprocess
. Эти методы обеспечивают гибкость и позволяют легко подключать выходные данные одной команды в качестве входных данных для другой команды. В зависимости от вашего конкретного случая использования вы можете выбрать метод, который подходит вам лучше всего.