Как бы один позвонил команду оболочки из Python, которая содержит трубу и захват вывода?
Предположим, что команда была чем-то вроде:
cat file.log | tail -1
, эквивалент которого я пытаюсь сделать, было бы чем-то вроде:
my $string = `cat file.log | tail -1`;
Простая функция для выполненной оболочки управляет со многими каналами
Используя
res, err = eval_shell_cmd('pacman -Qii | grep MODIFIED | grep -v UN | cut -f 2')
Функция
import subprocess
def eval_shell_cmd(command, debug=False):
"""
Eval shell command with pipes and return result
:param command: Shell command
:param debug: Debug flag
:return: Result string
"""
processes = command.split(' | ')
if debug:
print('Processes:', processes)
for index, value in enumerate(processes):
args = value.split(' ')
if debug:
print(index, args)
if index == 0:
p = subprocess.Popen(args, stdout=subprocess.PIPE)
else:
p = subprocess.Popen(args, stdin=p.stdout, stdout=subprocess.PIPE)
if index == len(processes) - 1:
result, error = p.communicate()
return result.decode('utf-8'), error