2012-01-20 19 views
12

Sto usando una coppia di programmi python, uno dei quali dovrebbe chiamare il secondo.Chiama un sottoprocesso python come demone ed esci

Ma questo dovrebbe essere fatto in modo che il primo programma renda il secondo un demone (o in esecuzione nel processo in background), quindi esca, senza attendere il termine del secondo programma.

È possibile in Python?

Ho cercato a os.fork, modulo sottoprocesso, ma sono abbastanza confuso come il modo corretto per raggiungere questo obiettivo ...

risposta

10

È possibile utilizzare subprocess.Popen per questo:

import subprocess 

cmd = ['/usr/bin/python', '/path/to/my/second/pythonscript.py'] 
subprocess.Popen(cmd) 

Si potrebbe voler reindirizzare stdout e stderr da qualche parte, è possibile farlo passando stdout=<file_obj> al costruttore Popen.

+1

Quindi, in base a ciò, 'daemon_process' dovrebbe essere uguale a qualcosa come '/ usr/bin/pyton /path/to/my/second/pythonscript.py'? –

+0

@JavierNovoaC. 'Popen' prende una lista di argomenti. Modificherò la mia risposta per chiarire. –

+0

grazie! che ha funzionato;) –

3

Un "daemon" ha una definizione più specifica del semplice "processo in background". Per impostazione predefinita, Popen eseguirà un sottoprocesso e restituirà il controllo al programma per continuare l'esecuzione. Tuttavia, questo non dice nulla riguardo ai segnali (in particolare, SIGHUP se l'utente chiude la shell prima del completamento del processo in background) o disconnette da stdin, stderr, stdout e qualsiasi altro descrittore di file aperto nel momento in cui invochi Popen. Se vuoi davvero che tu voglia un demone, dovresti usare il modulo python-daemon, un'implementazione di PEP 3143. Questo si prende cura delle parti lorde a cui non vuoi pensare.