subproceso de python. Popen captura muchos resultados

Estoy llamando a subprocess.Popen desde un script de python y luego llamo a communicar

process = subprocess.Popen(cmds, shell=shell, stdout=subprocess.PIPE,  
                               stderr=subprocess.PIPE)  

stdout, stderr = process.communicate()

El problema con esto es que la salida estándar está almacenada en búfer y solo capturará una cierta cantidad de caracteres.

La pregunta es, ¿cómo puedo obtener el stdout completo y el stderr completo del proceso que genero?

preguntado el 04 de julio de 12 a las 01:07

Debería obtener todos los procesos y errar. ¿Puedes tirar muestras? -

Estaba haciendo referencia a una parte de la documentación. docs.python.org/library/subprocess.html Nota La lectura de datos se almacena en la memoria, por lo que no utilice este método si el tamaño de los datos es grande o ilimitado. Los resultados son compilaciones que son demasiado grandes para publicar en línea. Pongo ejemplos en eng.utah.edu/~rweber/python_out.txt -

Obtendrá todos los resultados siempre que no se quede sin memoria del sistema (o reciba un error que indique que se excede la longitud máxima de la cadena de python) -

Lo intentaré de nuevo y veré si tal vez se produjo un error, pero estoy obteniendo muchos resultados. -

1 Respuestas

Un par de puntos.

Si está utilizando TUBO por salida estándar/derr estándar y abierto el proceso comienza a escribir una gran cantidad de datos, y en su proceso tampoco está leyendo salida estándar/derr estándar entonces el El proceso abierto bloquearía. Cual es mas o menos declarado como

Note

Do not use stdout=PIPE or stderr=PIPE with this function. As the pipes are not being read in the current process, the child process may block if it generates enough output to a pipe to fill up the OS pipe buffer.

Con respecto a la otra nota que usted señaló. Eso es aplicable solo si Popen con stdout=Ninguno, stderr=Ninguno. En ese caso todos los Proceso abierto' out/err se almacenará en la memoria.

Respondido 04 Jul 12, 05:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.