Перейти к содержимому

Как держать скрипт Python запущенным в фоне в Windows

Скрипт Python, запущенный из окна консоли, останавливается при закрытии этого окна. Обычные способы в Windows: pythonw.exe (тот же интерпретатор без окна консоли, поэтому вывод никуда не попадает), Start-Process pythonw -ArgumentList worker.py для отсоединённого запуска или запланированная задача для того, что должно работать при входе или по таймеру. Во всех случаях, когда процесс нужно завершить, его приходится искать в диспетчере задач.

Moonpool запускает команду в собственной вкладке терминала, поэтому у вас остаются вывод и кнопка «Остановить» без отдельного окна консоли. Для скрипта, который работает, пока вы его не остановите, используйте приложение типа cli. Параметр -u заставляет Python сразу сбрасывать вывод, чтобы вкладка показывала его в реальном времени:

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

Запустите приложение и щёлкните по его названию, чтобы смотреть вывод. Приложение cli считается работающим, пока выполняется его команда, и становится серым, когда скрипт завершается, а во вкладке остаётся [process exited]. Кнопка Остановить завершает скрипт и всё, что он запустил. Если указывать python.exe виртуального окружения по пути, шаг активации не нужен.

Если скрипт обслуживает HTTP (Flask, FastAPI, python -m http.server), сделайте его приложением типа web, чтобы состояние «работает» определялось по его порту:

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: бесплатное программное обеспечение от FasterDB