[pyar] Leer stdout de un proceso que lanzo con subprocess.Popen sin bloquear el script

Claudio Freire klaussfreire en gmail.com
Mie Abr 6 18:55:45 ART 2011


2011/4/6 Dario Ocles <dario.ocles en gmail.com>:
> El problema que tengo es que cada vez que intento leer el stdout del
> proceso esta lectura se clava hasta que termina todo el proceso, que
> no me sirve.

La lectura por file objects es bloqueante.

Tenés tres opciones:

1. Usar threads, hacer que un thread en background vaya leyendo y
poniendo lo que lee en algún lugar de donde tu aplicación pueda
consultarlo rápidamente sin bloquear.
2. Usar asio para hacer entrada/salida no bloqueante - con fcntl.ioctl
podés poner al file descriptor en modo no bloqueante
3. Usar fcntl.ioctl para preguntar si hay datos que leer antes de
intentar leerlos

Todo menos 1 es unix-specífico. De hecho, windows y otras plataformas
también tienen e/s no bloqueante, pero es diferente así que no es
portable. Threads es lo más portable.



More information about the pyar mailing list