Windows - запустить процесс в фоновом режиме после закрытия cmd

14

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

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

python script.py &

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

disown

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

start /b python script.py

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

multigoodverse
источник

Ответы:

6

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после того, как консоль была уже скрыта.

CherryDT
источник
-1

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

run python script.py
nikc
источник
1
Да, и на Linux вместо background ( &) и disownя бы предложил использовать nohup.
Ник
4
Эта команда вошла в Windows , CMD оболочки дает следующее сообщение об ошибке: 'run' is not recognized as an internal or external command, operable path or batch file..
отмечается