2011-07-24 19 views
7

tengo el siguiente código Python:comando del sistema de ejecución de Python y luego salir ... no van a salir

os.system("C:/Python27/python.exe C:/GUI/TestGUI.py") 
sys.exit(0) 

Se ejecuta la multa de comandos, y aparece una ventana emergente. Sin embargo, no sale del primer script. Simplemente se queda allí, y eventualmente tengo que forzar a matar el proceso. No se producen errores ¿Que esta pasando?

+0

intente os._exit (0) – Eddie

+3

El problema es que la función 'os.system (command)' bloquea hasta que el comando se termina de ejecutar, lo que OP quiere es ejecutar el comando sin esperar a que termine. –

+0

@Dan ¡Exactamente! Me acabo de dar cuenta de que ese es el problema. Dado que el script python se está ejecutando, todavía está activo en el "shell", y el sistema os.system tiene que esperar hasta que se haya cerrado el shell. ¿Cómo haría esto? –

Respuesta

10

en lugar de os.system uso subprocess.Popen

se ejecuta una orden y no espera a ella y luego sale:

import subprocess 
import sys 

subprocess.Popen(["mupdf", "/home/dan/Desktop/Sieve-JFP.pdf"]) 
sys.exit(0) 

nota que os.system(command) como:

p = subprocess.Popen(command) 
p.wait() 
+0

Y si está ejecutando la secuencia de comandos superior desde el interior de una ventana de terminal, puede experimentar que esta ventana permanezca abierta incluso después de haber salido de la secuencia de comandos y el 'cmd.exe' en sí mismo ... Me he dado cuenta de que esto sucede si comenzó algunos procesos en segundo plano desde el interior de esta ventana. La ventana se cierra después de que estos procesos salen. – spacediver

0
import sys ,subprocess 

subprocess.Popen(["C:/Python27/python.exe", "C:/GUI/TestGUI.py"]) 
sys.exit(0) 

Popen from subprocess module lo que estás buscando.

0

sugiere emplear os._exit en lugar de sys.exit, ya que sys.exit no sale de un programa pero aumenta el nivel de excepción o sale un hilo. os._exit(-1) sale de todo el programa

0

Teclado Las señales e interrupciones solo se ven por el proceso (es decir, el hilo principal). Si su comando anidado se cuelga debido a algún tipo de archivo leído o bloque de escritura, no podrá salir del programa utilizando ningún comando de teclado.

Why does a read-only open of a named pipe block?

Si no puede eliminar la fuente del bloque de disco, a continuación, una manera es envolver el proceso en el hilo para que pueda forzar a acabar con él. Pero si hace esto, deja la oportunidad de archivos medio escritos y dañados en el disco.

Cuestiones relacionadas