[pyar] comunicacion con un proceso
Matias Graña
matias.alejo en gmail.com
Jue Feb 10 10:51:48 ART 2011
2011/2/10 Roberto Alsina <ralsina en netmanagers.com.ar>:
> On 2/10/2011 10:14 AM, Matias Graña wrote:
>>
>> Tengo un Thread que lanza un proceso en mi máquina, con
>> subprocess.Popen(proceso, stdout=subprocess.PIPE, stderr=un_archivo).
>> Lo hago así porque necesito capturar el stderr y empezar a hacer cosas
>> cuando en el stderr aparece una línea determinada. En este momento,
>> levanto el proceso y voy leyendo repetidas veces el archivo de stderr
>> hasta que aparece la línea. Estoy 104% seguro de que no es la mejor
>> forma de hacer esto; imagino que con sockets debería poder andar
>> mejor. Pero nunca usé sockets y no acierto a encontrar el ejemplo
>> adecuado para mi caso. O, quizás, sockets no es la respuesta.
>>
>> Creo que la pregunta tácita quedó clara. Espero.
>
> Lo que queres es leer el stderr, no mandarlo a un archivo.
>
> http://docs.python.org/library/subprocess.html#replacing-os-popen-os-popen2-os-popen3
Antes que nada: gracias! Muy posiblemente sea esto lo que quiero, sí.
Pero tengo un problema con algún flush. Ejemplo de juguete:
$ cat lento
#!/bin/bash
for (( i=0; i<10; i++ )) ; do
echo $i
sleep 1
done
Y en python, luego de importar subprocess,
>>> def n():
p = subprocess.Popen('lento', stdout=subprocess.PIPE,
stderr=subprocess.PIPE, stdin=subprocess.PIPE, bufsize=0)
so = p.stdout
for line in so:
print line
>>> n()
Yo esperaría que esto vaya tirando los números del 0 al 9 a razón de
uno por segundo (como hace el comando 'lento' original). Pero no,
espera 10 segundos y luego imprime todos juntos. Cómo hago para verlos
a medida que van saliendo?
Matías
More information about the pyar
mailing list