[Python-es] duda con subprocess.Popen

Arnau Sanchez pyarnau en gmail.com
Mar Ene 25 17:25:30 CET 2011


On Tue, 25 Jan 2011 12:08:29 -0400 Tony Peña wrote:

> cmd = "ls -lhR /"
> subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True).command()[0]

Querías decir communicate(), ¿no?

http://docs.python.org/library/subprocess.html#subprocess.Popen.communicate

"Read data from stdout and stderr, until end-of-file is reached. Wait for
process to terminate."

O sea, que no te sirve. Lo que tienes que hacer es guardar el objeto popen
para luego trabajar con él. Ten en cuenta que el simple hecho de instanciarlo
ya arranca el proceso:

popen = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True)

Ahora por ejemplo podrías hacer popen.stdout.read(), pero esto de nuevo es
bloqueante. Como dices que estás con pygtk deberías mirarte:

http://www.pygtk.org/pygtk2tutorial/sec-MonitoringIO.html

Con esto deberías ser capaz de ir leyendo la salida de popen.stdout poco a poco
(desde callbacks), y el bucle de eventos del GUI seguirá funcionando sin
problemas.

arnau


Más información sobre la lista de distribución Python-es