Pour exécuter des commandes shell complexes qui impliquent de canaliser plusieurs processus, le module de sous-processus de Python fournit des fonctionnalités pour créer et gérer des processus. Explorons comment utiliser subprocess.Popen à cette fin.
La commande shell fournie :
echo "input data" | awk -f script.awk | sort > outfile.txt
dirige la sortie de echo "input data" dans le processus awk, dont la sortie est ensuite transmise au processus de tri. Pour simuler cela à l'aide de subprocess.Popen :
import subprocess p_awk = subprocess.Popen(["awk","-f","script.awk"], stdin=subprocess.PIPE, stdout=subprocess.PIPE) p_sort = subprocess.Popen(["sort"], stdin=p_awk.stdout, stdout=subprocess.PIPE) stdout_data = p_sort.communicate(b"input data\n")[0]
Dans ce scénario, la commande echo est remplacée par une écriture directe dans le stdin de p_awk, et stdout_data contient la sortie triée.
Bien que la solution acceptée atteigne l'objectif de piping, il est recommandé d'envisager une approche uniquement Python comme illustré ci-dessous :
import subprocess awk_sort = subprocess.Popen("awk -f script.awk | sort > outfile.txt", stdin=subprocess.PIPE, shell=True) stdout_data = awk_sort.communicate(b"input data\n")[0]
Cette approche délègue la tuyauterie au shell, simplifiant ainsi le code du sous-processus. De plus, la réécriture du script awk en Python peut éliminer awk en tant que dépendance, ce qui entraîne un code plus rapide et plus simple.
Le canalisation de plusieurs processus introduit des complexités et des goulots d'étranglement potentiels. En éliminant les tuyaux et en utilisant Python pour toutes les étapes de traitement, vous bénéficiez des avantages suivants :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!