Piping de plusieurs processus en Python à l'aide de Subprocess.Popen
Lorsque vous essayez de connecter plusieurs processus via des tuyaux à l'aide de subprocess.Popen, la tâche peut être simplifié en déléguant la création de tuyaux au shell. Considérez le code Python suivant :
awk_sort = subprocess.Popen("awk -f script.awk | sort > outfile.txt", stdin=subprocess.PIPE, shell=True) awk_sort.communicate(b"input data\n")
Dans cet exemple, le shell est responsable de la connexion des processus awk et sort avec un pipeline. Cela élimine le besoin de gérer directement plusieurs sous-processus et canaux.
Élimination du besoin d'outils externes
Cependant, comme le suggèrent certains experts, il est souvent avantageux d'éviter d'utiliser des outils externes. des outils comme awk. La réécriture du script en Python peut améliorer les performances et éliminer la complexité inhérente au pipeline. Par exemple :
import subprocess p = subprocess.Popen("sort", stdin=subprocess.PIPE, stdout=open("outfile.txt", "w")) p.communicate(b"input data\n")
Ce script natif Python obtient la même fonctionnalité sans avoir besoin de pipeline ou de commandes externes. En simplifiant le code, le risque d'erreurs et d'ambiguïtés est réduit.
Raisons pour éviter le pipeline
Bien que le pipeline puisse offrir des avantages en termes de performances dans certains scénarios, il ajoute souvent des éléments inutiles. complexité du code. Voici quelques raisons d'envisager d'éviter le pipeline :
Conclusion
Déléguer le pipeline au shell peut simplifier le code en permettant au shell de gérer le processus de création de tuyaux. Cependant, il est important d’examiner attentivement si des outils externes et un pipeline sont nécessaires pour la tâche à accomplir. Dans de nombreux cas, l'élimination du pipeline et des outils externes peut améliorer la simplicité et les performances du code.
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!