51 votes

exécution d'une ligne de commande contenant Pipes et affichage du résultat sur STDOUT

Comment appeler une commande shell depuis Python qui contient un pipe et capturer la sortie ?

Supposons que la commande soit quelque chose comme :

cat file.log | tail -1

L'équivalent Perl de ce que j'essaie de faire serait quelque chose comme :

my $string = `cat file.log | tail -1`;

0voto

phpusr Points 11

Fonction simple pour exécuter une commande shell avec plusieurs tuyaux

Utilisation de

res, err = eval_shell_cmd('pacman -Qii | grep MODIFIED | grep -v UN | cut -f 2')

Fonction

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X