Windows: esegue il processo in background dopo aver chiuso cmd


15

Ho uno script Python che voglio eseguire come processo in background su Windows.

Posso farlo su Linux con:

python script.py &

e quindi disconnettere il processo dal terminale con:

disown

Su Windows, tutto ciò che ho finora è questo:

start /b python script.py

Tuttavia, se chiudo la finestra CMD, lo script si interrompe. C'è qualche comando aggiuntivo che mi manca qui per mantenere lo script in esecuzione in background?

Risposte:


6

startdovrebbe già essere la giusta direzione. Tuttavia, lo /bcollega alla stessa console. Ora il problema è che quando una finestra della console viene chiusa, anche qualsiasi processo associato a questa console verrà chiuso.

Puoi usare entrambi startsenza /b, quindi verrà eseguito in una nuova console. Se si desidera eseguirlo in background senza una finestra della console, è necessario utilizzare un VBScript o uno strumento di terze parti: eseguire un file batch in modo completamente nascosto

Tuttavia, in quel caso non vedresti più l'output stdout / stderr. Potresti reindirizzarlo a un file, avvolgendolo in una cmd /c your_command > stdout.txt 2> stderr.txtchiamata e avviandolo attraverso uno dei metodi di cui sopra (VBScript, strumento di terze parti, ...).

In alternativa, puoi anche nascondere la finestra della tua console prima di uscire. Ho appena scritto un piccolo programma di una riga che fa esattamente questo (il codice sorgente è fondamentalmente ShowWindow(GetConsoleWindow(), SW_HIDE)): http://share.cherrytree.at/showfile-24286/hide_current_console.exe

In questo modo, puoi usare start /be quando vuoi "chiudere" la tua console (tecnicamente nasconderla), eseguiresti hide_current_console & exitquale nascondere la console e quindi chiudere il processo cmd.exe (non il processo python) - in una riga, poiché non è possibile digitare exitdopo che la console era già nascosta.


Da dove hide_current_consoleviene? Non funziona su un PC W10.
Fonti di BTC,

1
L'ho provato di nuovo, funziona ancora. Da dove viene: rileggi il post, ho mostrato la riga di codice sorgente di questo file e ho collegato un file hide_current_console.exe compilato da scaricare ...
CherryDT

-2

Ho trovato quanto segue ha funzionato bene per me:

run python script.py

1
Oh, e su Linux invece di background ( &) e disownsuggerirei di usare nohup.
nikc,

5
Questo comando è entrato in un Windows cmd shell dà il seguente errore: 'run' is not recognized as an internal or external command, operable path or batch file..
segna il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.