Quería usar un python equivalente a canalizar algunos comandos de shell en perl. Algo así como la versión python de open (PIPE, "command |").Limpieza de Popen de Python
que ir al módulo de subproceso y probar este:
p = subprocess.Popen("zgrep thingiwant largefile", shell=True, stdout=subprocess.PIPE)
Esto funciona para la lectura de la salida de la misma manera que lo haría en Perl, pero no limpia a sí mismo. Cuando salgo de la intérprete, consigo
grep: writing output: Broken pipe
vomitó todo Stderr unos pocos millones de veces. Supongo que ingenuamente esperaba que todo esto se ocupara de mí, pero eso no es cierto. Llamar a terminar o matar en p no parece ayudar. Mire la tabla de procesos, veo que esto mata el proceso/bin/sh, pero deja al niño gzip en su lugar para quejarse sobre la tubería rota.
¿Cuál es la forma correcta de hacerlo?
¿Saldrá del intérprete antes de que su subproceso 'p' haya terminado? – physicsmichael