Przejdź do głównej zawartości

Utrzymywanie działania skryptu Pythona w tle w systemie Windows

Skrypt Pythona uruchomiony z okna konsoli przestaje działać, gdy to okno zostanie zamknięte. Zwykłe sposoby w systemie Windows to pythonw.exe (ten sam interpreter bez okna konsoli, więc wyjście trafia donikąd), Start-Process pythonw -ArgumentList worker.py, aby uruchomić go odłączonego, albo zaplanowane zadanie dla czegoś, co ma działać przy logowaniu lub według harmonogramu. Przy każdym z nich proces trzeba samodzielnie znaleźć w Menedżerze zadań, gdy ma zniknąć.

Moonpool uruchamia polecenie we własnej karcie terminala, więc wyjście zostaje zachowane i dostępny jest przycisk Zatrzymaj bez własnego okna konsoli. Dla skryptu, który działa, dopóki go nie zatrzymamy, należy użyć aplikacji cli. Opcja -u sprawia, że Python od razu opróżnia bufor wyjścia, więc karta pokazuje je na żywo:

apps.json
{
"id": "worker",
"name": "Queue worker",
"group": "Scripts",
"type": "cli",
"cwd": "C:\\code\\worker",
"command": ".venv\\Scripts\\python.exe -u worker.py"
}

Po uruchomieniu wystarczy kliknąć nazwę aplikacji, aby obserwować jej wyjście. Aplikacja cli jest uznawana za działającą, dopóki działa jej polecenie, a robi się szara, gdy skrypt się zakończy, z komunikatem [proces zakończony] pozostawionym w karcie. Zatrzymaj kończy skrypt i wszystko, co uruchomił. Użycie python.exe ze środowiska wirtualnego przez ścieżkę oznacza, że nie jest potrzebny krok aktywacji.

Jeśli skrypt udostępnia HTTP (Flask, FastAPI, python -m http.server), należy zrobić z niego aplikację web, aby stan działania wynikał z jej portu:

apps.json
{
"id": "docs-api",
"name": "Docs API",
"group": "Scripts",
"type": "web",
"cwd": "C:\\code\\docs-api",
"command": ".venv\\Scripts\\python.exe -u app.py",
"port": 8091,
"url": "http://127.0.0.1:8091",
"env": { "PORT": "8091" }
}

Moonpool to darmowe oprogramowanie od FasterDB