web-dev-qa-db-ja.com

Windows-コマンドを閉じた後にバックグラウンドでプロセスを実行する

Windowsでバックグラウンドプロセスとして実行するPythonスクリプトがあります。

私はLinuxでそれを行うことができます:

python script.py &

そして、次のコマンドでターミナルからプロセスを切断します:

disown

Windowsでは、これまでのところこれだけです:

start /b python script.py

ただし、CMDウィンドウを閉じると、スクリプトの実行が停止します。スクリプトをバックグラウンドで実行し続けるためにここで欠けている追加のコマンドはありますか?

15
multigoodverse

startはすでに正しい方向にあるはずです。ただし、_/b_は同じコンソールに接続します。ここで問題は、コンソールウィンドウが閉じられると、このコンソールに関連付けられているプロセスもすべて閉じられることです。

_/b_なしでstartを使用すると、新しいコンソールで実行されます。コンソールウィンドウなしでバックグラウンドで実行する場合は、VBScriptまたはサードパーティのツールを使用する必要があります。 バッチファイルを完全に非表示の方法で実行する

ただし、その場合、stdout/stderrの出力は表示されなくなります。ただし、_cmd /c your_command > stdout.txt 2> stderr.txt_呼び出しでラップし、前述のメソッド(VBScript、サードパーティツールなど)のいずれかを使用してこれを開始することで、ファイルにリダイレクトできます。

または、終了する前に独自のコンソールウィンドウを非表示にすることもできます。私はちょうどそれを行う小さな1行のプログラムを書きました(ソースコードは基本的にShowWindow(GetConsoleWindow(), SW_HIDE)): http://share.cherrytree.at/showfile-24286/hide_current_console.exe =

このように、_start /b_を使用でき、コンソールを「閉じる」(技術的には非表示にする)場合は、_hide_current_console & exit_を実行してコンソールを非表示にしてから、cmd.exeプロセスを閉じます( pythonプロセス)ではありません-コンソールがすでに非表示になっているとexitを入力できないため、1行で入力します。

6
CherryDT