Necesito ejecutar un comando que produce una gran cantidad de salida y toma mucho tiempo para ejecutarse (> 30 minutos). Estaba pensando en usar el subproceso. Tengo libertad para hacerlo. Necesito capturar la salida del comando, entonces paso PIPE a stdout y stderr.Necesito evitar el interbloqueo de subproceso sin comunicarme
Un problema de interbloqueo al usar Popen.wait() está bien documentado en muchos foros, por lo que Popen.communicate() es la forma propuesta de evitar el interbloqueo. El problema con esa solución es que los bloques de comunicación() hasta que se complete el comando. Necesito imprimir todo lo que llega en stdout mientras se ejecuta el comando. Si no hay salida después de 20 minutos, se ejecutará la ejecución del script.
Estas son algunas limitaciones que tengo que respetar:
- versión 2.4.2 Mi Python es y no puedo actualizar.
- Si la solución es todavía utilizar subproceso, necesito pasar subprocess.PIPE a todos std maneja para evitar este error: http://bugs.python.org/issue1124861
¿Hay una manera de hacerlo?
(Viniendo de Google?) Todas las tuberías serán un punto muerto cuando uno de los tubos de búfer se llena y no se lee. p.ej. estancamiento estándar cuando stderr está lleno. Nunca pase un PIPE que no intente leer. –