Forum général.général Python / (linux) shell : interfacer l'un avec l'autre

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
3
22
sept.
2015

Bonjour, j'aimerais utiliser la sortie d'un programme écrit en Python3 pour que ce programme donne au shell une liste de fichiers, que le shell récupère cette liste via un pipe et que je puisse placer une commande shell sur cet ensemble de fichiers.

Quelque chose comme ça (si je veux chercher une chaîne de caractères dans les fichiers) :

./script.py | grep -rHn --color "string" {} \;

Je n'arrive pas à le faire. Pourriez-vous me donner un lien, une piste ou me proposer un exemple ?

Merci !

  • # entrée standard et arguments

    Posté par  . Évalué à 8. Dernière modification le 22 septembre 2015 à 14:33.

    Que je sache, grep n'ouvre les fichiers que depuis ses arguments en ligne de commande. Ici il va donc chercher un fichier {} et un ;
    La syntaxe que tu essayes d'utiliser est celle de find, c-à-d find commande {} \;, c'est find qui va lancer commande en remplaçant le {} par le fichier en cours.

    Pour des fichiers sans espace, on peut simplement utiliser grep string $(./script.py)
    Avec cette syntaxe le shell va d'abord exécuter ce qui est entre $() et passer la sortie de ce programme comme arguments pour la commande grep.

    Une solution plus générale est d'utiliser xargs (la page de man décrit tout ce qui est possible) pour lancer une commande pour chaque ligne de l'entrée standard.

  • # xargs ou parallel

    Posté par  . Évalué à 2.

    regarde du côté de xargs, en standard sur la majorité des systèmes (package findutils)
    plus puissant, gnu parallel, à installer depuis le système de gestion de package de ta distribution.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.