Запуск командной строки, содержащей трубы и отображающую результат к STDOUT

Как бы один позвонил команду оболочки из Python, которая содержит трубу и захват вывода?

Предположим, что команда была чем-то вроде:

cat file.log | tail -1

, эквивалент которого я пытаюсь сделать, было бы чем-то вроде:

my $string = `cat file.log | tail -1`;
38
задан ivanleoncz 16 November 2017 в 15:47
поделиться

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
0
ответ дан 27 November 2019 в 03:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: