Section 17.1.4.2: Replacing shell pipeline du module subprocess python dit pour remplacerExpliquer par exemple du module subprocess python
output=`dmesg | grep hda`
avec
p1 = Popen(["dmesg"], stdout=PIPE)
p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
p1.stdout.close() # Allow p1 to receive a SIGPIPE if p2 exits.
output = p2.communicate()[0]
Le commentaire à la troisième ligne explique pourquoi la fonction de fermeture est appelée, mais pas pourquoi cela a du sens. Cela ne me concerne pas. La fermeture de p1.stdout avant l'appel de la méthode de communication n'empêche-t-elle pas d'envoyer une sortie via le canal? (Evidemment ça ne marchera pas, j'ai essayé de lancer le code et ça marche bien). Pourquoi est-il nécessaire d'appeler à proximité pour que p1 reçoive SIGPIPE? Quel genre de proche est-ce qui ne ferme pas? Quoi, exactement, est-ce qu'il se ferme?
Veuillez considérer ceci comme une question académique, je n'essaie pas d'accomplir quoi que ce soit si ce n'est de mieux comprendre ces choses.
stdin et stdout sont des fichiers. Donc vous êtes censé les fermer pour libérer le tuyau. – JBernardo