ho voluto avviare un processo dal mio script python (main.py)
, in particolare voglio eseguire il comando di seguitoavviare un processo completamente indipendente
`nohup python ./myfile.py &`
e questo file myfile.py
dovrebbe anche dopo le mie principali uscite script Python.
Inoltre desidero ottenere il pid
del nuovo processo.
ho provato os.spawnl*
, os.exec*
& subprocess.Popen
metodi, tutti sono concludano mia myfile.py
se il mio script main.py esce.
Mi può mancare qualcosa.
Aggiornamento: Posso utilizzare os.startfile
con xdg-open
? È un approccio corretto?
Esempio
a = subprocess.Popen([sys.executable, "nohup /usr/bin/python25 /long_process.py &"],\
stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
print a.pid
Se controllo ps aux | grep long_process
, non ho potuto vedere alcun processo in esecuzione.
long_process.py che continua a stampare del testo: nessuna uscita.
Sto facendo qualcosa di sbagliato qui?
Puoi pubblicare un esempio minimo che non funziona? Dopo un sottoprocesso di importazione banale 'python -c '; subprocess.Popen (["sleep", "60"]) "l'output di' ps' mostra che "sleep" continua a funzionare bene dopo che Python è uscito. – user4815162342
Stai eseguendo Python con un singolo argomento, '" nohup/usr/bin/python25 ... "', che non può funzionare perché l'eseguibile 'python' cercherà uno script in un file chiamato esattamente' nohup/usr/bin/... ', che non esiste. E dato che si specifica 'stderr' come' PIPE' senza mai leggere il contenuto della pipe, non si arriva mai a vedere il messaggio di errore. Perdere il 'nohup' e' & ', e semplicemente eseguire' subprocess.Popen ([sys.executable, "/.../ long_process.py"]) '. Inoltre, non specificare 'stdin' e' stderr' come pipe, a meno che non lo intendi. – user4815162342
'nohup' ha più senso quando si avvia un processo da una shell. Non vedo 'shell = True' nella tua chiamata' Popen'. – 9000