Sección 17.1.4.2: Replacing shell pipeline del módulo Python subproceso dice para reemplazarExplicar ejemplo de pitón subproceso módulo
output=`dmesg | grep hda`
con
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]
El comentario a la tercera línea explica por qué la función de cierre está siendo llamados, no por qué tiene sentido. No, para mí. ¿No se cerrará p1.stdout antes de que se llame al método de comunicación para evitar que se envíe la salida a través de la tubería? (Obviamente no, he intentado ejecutar el código y funciona bien). ¿Por qué es necesario llamar cerca para que p1 reciba SIGPIPE? ¿Qué tipo de cerca es que no se cierra? ¿Qué, exactamente, se está cerrando?
Por favor, considere esta una cuestión académica, no estoy tratando de lograr nada, excepto la comprensión de estas cosas mejor.
stdin y stdout son archivos. Entonces se supone que debes cerrarlos para liberar la tubería. – JBernardo