2009-10-22 71 views
10

me trataron estos dos métodos:¿Cómo iniciar y ejecutar un script externo en segundo plano?

os.system("python test.py") 

subprocess.Popen("python test.py", shell=True) 

Ambos enfoques necesidad de esperar hasta test.py acabados que bloquea el proceso principal. Sé que "nohup" puede hacer el trabajo. ¿Hay alguna forma de Python para lanzar test.py o cualquier otro script de shell y dejarlo ejecutándose en segundo plano?

test.py Supongamos que es de esta manera:

for i in range(0, 1000000): 
    print i 

Tanto os.system() o subprocess.Popen() bloqueará programa principal hasta 1000000 líneas de salida mostrada. Lo que quiero es dejar que test.py se ejecute silenciosamente y muestre solo la salida del programa principal. El programa principal puede estar en silencio mientras test.py aún se está ejecutando.

Respuesta

32

subprocess.Popen(["python", "test.py"])should work.

Tenga en cuenta que el trabajo aún puede fallecer cuando se cierra el script principal. En este caso, intente subprocess.Popen(["nohup", "python", "test.py"])

+1

subprocess.Popen ([ "pitón", "test.py"]) acaba de lanza test.py y bloques de proceso principal por la espera de la salida de test.py. – jack

+2

Eso solo debería ocurrir si solicita 'stdout = PIPE' también. ¿Qué versión de Python? ¿Puedes agregar una "impresión" xxx "' después de la llamada a Popen para comprobar que realmente bloquea? –

+0

Acabo de probar el código anterior y funciona para mí con Python 2.5.2 en Windows. Tu problema debe ser otra cosa. –

1
os.spawnlp(os.P_NOWAIT, "path_to_test.py", "test.py") 
+0

funciona, pero ¿es posible dejar que test.py se ejecute en silencio? – jack

+0

en silencio? ¿Quieres decir que no quieres ver la salida en la pantalla? – Viswanadh

+0

sí, no quiero ver el resultado en la pantalla. ¿Puedo hacerlo agregando ">>/dev/null" al código? – jack

Cuestiones relacionadas