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

Dario Ocles dario.ocles en gmail.com
Jue Abr 7 09:40:52 ART 2011


El día 6 de abril de 2011 18:55, Claudio Freire
<klaussfreire en gmail.com> escribió:
> 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.
>

Es bloqueante pero imagine que yo no seria el único con este problema
y que lo tendrían que haber resuelto :S . Me imaginaba algo como pasar
un parámetro mas, o usar alguna otra función que no conocía y no
encontré en Google.

No conocía la existencia de fcntl, voy a ver si con esto puedo resolverlo.

Que no sea portable en mi caso no importa, aunque si no logro
resultados rápidos con fcntl lo voy a terminar haciendo con threads :)
.

Muchas gracias!

Saludos.



More information about the pyar mailing list