Lentitud comando os.system

heimy ricardo.cardenes en gmail.com
Mie Dic 2 19:26:58 CET 2009


2009/12/2 Carlos Herrera Polo <carlos.herrerapolo en gmail.com>:

> p = Popen(ls_comando , shell=True)
> sts = os.waitpid(p.pid, 0)[1]

...

> El problema esta en que no continua mi programa, sino que ejecuta el
> "comando externo", pero me parece que el subproceso queda en memoria o no se
> culmina, alguien tiene por favor experiencia con Popen ?

En lugar de usar os.waitpid() puedes aprovechar que el objeto devuelto
por Popen ya tiene su propio wait.

   p = Popen(ls_comando, shell = True)
   p.wait()

El único problema (y podría ser parte del tuyo), como te indica la
documentación de Popen.wait, es que si el programa dejó algo de salida
(por la estándar o por error), el programa que has ejecutado quedará a
la espera de que leas eso antes de terminar, así que no se cerrará y
tu programa quedará a la espera eternamente:

   p = Popen(ls_comando, shell = True)
   p.communicate()
   p.wait()

te resuelve ese problema. Déjalo tal cual si no te interesa la salida
para nada. En caso contrario, puedes tomar los datos devueltos por
p.communicate() y tratarlos.
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





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