Windows - Uruchom proces w tle po zamknięciu cmd

15

Mam skrypt w języku Python, który chcę uruchomić jako proces w tle w systemie Windows.

Mogę to zrobić w systemie Linux za pomocą:

python script.py &

a następnie odłącz proces od terminala za pomocą:

disown

W systemie Windows wszystko, co dotychczas mam, to:

start /b python script.py

Jeśli jednak zamknę okno CMD, skrypt przestanie działać. Czy brakuje mi tutaj jakiegoś dodatkowego polecenia, aby skrypt działał w tle?

multigoodverse
źródło

Odpowiedzi:

6

startpowinien już być właściwym kierunkiem. Jednak /bprzywiązuje go do tej samej konsoli. Problem polega na tym, że gdy okno konsoli jest zamknięte, wszelkie procesy związane z tą konsolą również zostaną zamknięte.

Możesz albo użyć startbez /b, a wtedy będzie działał w nowej konsoli. Jeśli chcesz uruchomić go w tle bez okna konsoli, musisz użyć VBScript lub narzędzia innej firmy: Uruchom plik wsadowy w całkowicie ukryty sposób

Jednak w takim przypadku nie zobaczysz już wyjścia stdout / stderr. Możesz jednak przekierować go do pliku, zawijając go w cmd /c your_command > stdout.txt 2> stderr.txtwywołaniu i uruchamiając go jedną z wyżej wymienionych metod (VBScript, narzędzie innej firmy, ...).

Alternatywnie możesz także ukryć własne okno konsoli przed wyjściem. Właśnie napisałem mały program jednowierszowy, który robi dokładnie to (kod źródłowy jest w zasadzie ShowWindow(GetConsoleWindow(), SW_HIDE)): http://share.cherrytree.at/showfile-24286/hide_current_console.exe

W ten sposób możesz użyć start /b, a kiedy chcesz „zamknąć” konsolę (technicznie to ukryć), uruchomisz, hide_current_console & exitco ukryje konsolę, a następnie zamkniesz proces cmd.exe (nie proces python) - w jednym wierszu, ponieważ nie można pisać exitpo tym, jak konsola była już ukryta.

CherryDT
źródło
Skąd hide_current_consolepochodzi? Nie działa na komputerze W10.
Btc Sources,
1
Testowałem to jeszcze raz, nadal działa. Skąd pochodzi: Proszę przeczytać ponownie post, pokazałem jeden wiersz kodu źródłowego tego pliku i podłączyłem skompilowany plik hide_current_console.exe do pobrania ...
CherryDT
-2

Stwierdziłem, że następujące działania były dla mnie dobre:

run python script.py
nikc
źródło
1
Aha, i na Linuksie zamiast w tle ( &) i disownsugerowałbym użycie nohup.
nikc,
5
Że komenda weszła w systemie Windows cmd powłoka daje następujący błąd: 'run' is not recognized as an internal or external command, operable path or batch file..
markshep,