2009-10-22 27 views
10

Ho provato questi due metodi:Come avviare ed eseguire script esterni in background?

os.system("python test.py") 

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

Entrambi gli approcci bisogno di aspettare che test.py finiture che blocca di processo principale. So che "nohup" può fare il lavoro. Esiste un modo Python per avviare test.py o altri script di shell e lasciarlo in esecuzione in background?

test.py Supponiamo è così:

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

Sia os.system() o subprocess.Popen() bloccherà programma principale fino 1000000 righe di output visualizzati. Quello che voglio è lasciare che test.py funzioni silenziosamente e mostri solo l'output del programma principale. Il programma principale potrebbe interrompersi mentre test.py è ancora in esecuzione.

risposta

32

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

Si noti che il lavoro potrebbe ancora morire quando si chiude lo script principale. In questo caso, provare subprocess.Popen(["nohup", "python", "test.py"])

+1

subprocess.Popen ([ "pitone", "test.py"]) solo lancia processo principale test.py e blocchi di attesa per l'uscita di test.py. – jack

+2

Questo dovrebbe accadere solo se si richiede anche 'stdout = PIPE'. Quale versione di Python? Puoi aggiungere un 'print" xxx "' dopo la chiamata a Popen per verificare che blocchi davvero? –

+0

Ho appena testato il codice sopra e funziona per me con Python 2.5.2 su Windows. Il tuo problema deve essere qualcos'altro. –

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

funziona, ma è possibile lasciare test.py eseguito silenziosamente? – jack

+0

silenziosamente? vuoi dire che non vuoi vedere l'output sullo schermo? – Viswanadh

+0

sì, non voglio vedere l'output sullo schermo. posso essere fatto aggiungendo ">>/dev/null" al codice? – jack

Problemi correlati