Windows - Führen Sie den Prozess im Hintergrund aus, nachdem Sie cmd geschlossen haben


15

Ich habe ein Python-Skript, das ich als Hintergrundprozess unter Windows ausführen möchte.

Ich kann das unter Linux machen mit:

python script.py &

und trennen Sie dann den Prozess vom Terminal mit:

disown

Unter Windows habe ich bisher nur Folgendes:

start /b python script.py

Wenn ich jedoch das CMD-Fenster schließe, wird das Skript nicht mehr ausgeführt. Gibt es einen zusätzlichen Befehl, den ich hier vermisse, um das Skript im Hintergrund laufen zu lassen?

Antworten:


6

startsollte schon die richtige Richtung sein. Allerdings /bhängt sie an der gleichen Konsole. Das Problem besteht nun darin, dass beim Schließen eines Konsolenfensters auch alle mit dieser Konsole verbundenen Prozesse geschlossen werden.

Sie können entweder startohne verwenden /b, dann wird es in einer neuen Konsole ausgeführt. Wenn Sie es jedoch im Hintergrund ohne Konsolenfenster ausführen möchten, müssen Sie ein VBScript-Tool oder ein Tool eines Drittanbieters verwenden: Führen Sie eine Batchdatei auf völlig versteckte Weise aus

In diesem Fall wird die Ausgabe stdout / stderr jedoch nicht mehr angezeigt. Sie können es jedoch in eine Datei umleiten, indem Sie es in einen cmd /c your_command > stdout.txt 2> stderr.txtAufruf einschließen und diese über eine der oben genannten Methoden (VBScript, Drittanbieter-Tool, ...) starten.

Alternativ können Sie vor dem Beenden auch Ihr eigenes Konsolenfenster ausblenden. Ich habe gerade ein kleines einzeiliges Programm geschrieben, das genau das tut (Quellcode ist im Grunde ShowWindow(GetConsoleWindow(), SW_HIDE)): http://share.cherrytree.at/showfile-24286/hide_current_console.exe

Auf diese Weise können Sie verwenden start /b, und wenn Sie Ihre Konsole "schließen" möchten (technisch ausblenden), würden Sie ausführen, hide_current_console & exitwodurch die Konsole ausgeblendet und dann der Prozess cmd.exe (nicht der Python-Prozess) geschlossen wird - in einer Zeile, da Sie nicht tippen können, exitnachdem die Konsole bereits ausgeblendet wurde.


Woher hide_current_consolekommt das? Funktioniert nicht auf einem W10-PC.
Btc Sources

1
Ich habe es erneut getestet, es funktioniert immer noch. Woher es kommt: Bitte lesen Sie den Beitrag noch einmal, ich habe die eine Zeile des Quellcodes dieser Datei gezeigt und eine kompilierte Datei hide_current_console.exe zum Herunterladen verknüpft ...
CherryDT

-2

Ich fand, dass Folgendes für mich gut funktioniert hat:

run python script.py

1
Oh, und unter Linux anstelle von background ( &) und disownich würde vorschlagen, zu verwenden nohup.
Nikc

5
Dieser in eine Windows-Cmd-Shell eingegebene Befehl gibt den folgenden Fehler aus : 'run' is not recognized as an internal or external command, operable path or batch file..
Markshep
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.