10

У меня есть сценарий Python, который я хочу запустить в Windows в качестве фонового процесса.

Я могу сделать это на Linux с:

python script.py &

а затем отключите процесс от терминала с помощью:

disown

На Windows все, что у меня есть, это:

start /b python script.py

Однако, если я закрою окно CMD, скрипт перестанет работать. Есть ли какая-то дополнительная команда, которую я здесь пропускаю, чтобы скрипт работал в фоновом режиме?

2 ответа2

5

start уже должно быть в правильном направлении. Однако /b присоединяет его к той же консоли. Теперь проблема в том, что когда окно консоли закрыто, любой процесс, связанный с этой консолью, также будет закрыт.

Вы можете использовать start без /b , тогда он будет запущен в новой консоли. Если вы хотите запустить его в фоновом режиме без окна консоли, вам нужно будет использовать VBScript или сторонний инструмент: запускать пакетный файл полностью скрытым способом

Однако в этом случае вы больше не увидите вывод stdout/stderr. Вы можете перенаправить его в файл, обернув его в cmd /c your_command > stdout.txt 2> stderr.txt и запустив его одним из вышеупомянутых методов (VBScript, сторонний инструмент, ...),

Кроме того, вы также можете скрыть свое собственное окно консоли перед выходом. Я только что написал небольшую однострочную программу, которая делает именно это (исходный код в основном ShowWindow(GetConsoleWindow(), SW_HIDE)): http://share.cherrytree.at/showfile-24286/hide_current_console.exe

Таким образом, вы можете использовать start /b , и когда вы хотите "закрыть" консоль (технически скрыть ее), вы запустите hide_current_console & exit который скроет консоль, а затем закроет процесс cmd.exe (не процесс python) ) - в одну строку, так как вы не можете набрать exit после того, как консоль уже скрыта.

0

Я обнаружил, что следующее работает хорошо для меня:

run python script.py

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .