Maison >développement back-end >Tutoriel Python >Comment puis-je connecter efficacement plusieurs processus en Python, en évitant la tuyauterie complexe avec « subprocess.Popen » ?
Dans ce scénario, vous souhaitez exécuter une commande shell à l'aide du module subprocess, en connectant trois commandes : echo, awk , trier et rediriger leur sortie vers un fichier de sortie.
echo "input data" | awk -f script.awk | sort > outfile.txt
En utilisant subprocess.Popen, vous have :
import subprocess p_awk = subprocess.Popen(["awk","-f","script.awk"], stdin=subprocess.PIPE, stdout=file("outfile.txt", "w")) p_awk.communicate( "input data" )
Bien que cette solution traite de la tuyauterie des awk à trier, elle néglige une considération importante :
Comme suggéré dans la réponse acceptée, au lieu d'utiliser awk et pipes, il est plus avantageux de réécrire le script.awk en Python. Cela élimine awk, le pipeline et le besoin de gestion complexe de sous-processus.
En effectuant toutes les opérations dans Python, vous gagnez plusieurs avantages :
La création de pipelines dans le shell implique plusieurs forks et manipulations de descripteurs de fichiers. Bien que cela soit possible en Python à l'aide d'API de bas niveau, il est beaucoup plus simple de déléguer la création du pipeline au shell en :
awk_sort = subprocess.Popen( "awk -f script.awk | sort > outfile.txt", stdin=subprocess.PIPE, shell=True ) awk_sort.communicate( b"input data\n" )
Cette approche utilise le shell comme intermédiaire pour créer le pipeline, simplifiant ainsi le code Python.
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!