problema con llamada a software
Patricio Olivares
polivare en lilyphilia.net
Sab Feb 24 07:00:56 CET 2007
Hola,
Fabio Duran Verdugo wrote:
> hola me llamo fabio y desarrollo bajo python y gtk incluyendo a kiwi
> (gnome), y tengo un problema que no es un bug pero resulta molesto, porque
> resulta que estoy desarrollando un sistema que necesita y despende de
> firefox (linux) y explorer (wintendo), y el problema es que si ejecuto esta
> instruccion :
>
> if sys.platform == "win32":
> os.system("explorer reporte.html")
> else:
> os.system("firefox reporte.html")
>
> mi sistema queda esperando que se termine esa instruccion provocando que es
> software se bloquee hasta que se cierre, una vez cerrado el navegador el
> sistema funciona tal cual y lo que necesito es que interactuen ambas cosas o
> sea mi sistema con el navegador, y eso no se y no eh podido hacerlo, porque
> necesariamente necesita pasa y esperar que eso se cumpla, alguna idea se
> agradece atte
os.system() se comporta parecido a la función "system" de C, o sea
que espera a que el proceso hijo termine.
Como alternativa fácil, puedes usar el módulo subprocess, si es que
estás usando python 2.4 o superior.
subprocess.Popen('firefox reporte.html', shell=True)
Popen soporta varias opciones extra para "conversar" con el
proceso, pero para lo que quieres, la línea de arriba debería
bastar.
Si necesitas que funcione en versiones anteriores de python, te
puede servir una de las os.spawn*()
http://docs.python.org/lib/os-process.html#l2h-2749
y aquí hay un ejemplo de uso (ojo con os.P_WAIT versus os.P_NOWAIT)
http://effbot.org/librarybook/os.htm
(busca "fork and wait are not available on Windows")
Suerte...
Más información sobre la lista de distribución Python-es