私は、「インデックスファイル」を使用する小さなアプリケーションを作成して、エクスプローラーのフォルダを数回押すだけで開くことができます。とにかく、アプリケーションがシャットダウンするたびに、「バックグラウンドプロセス」でそのインデックスファイルを更新したいと思います。インデックスファイルを更新するということは、ネットワークをスキャンすることを意味し、リモートユーザーによっては数分かかることがあります。そのため、ユーザーがプロセスを中断するのを避けるために、スキャンプロセス中にコンソールを非表示にしたいのです。プロセスの実行中にコンソールを閉じる
#these are just dummy lines
path = get_user_input()
subprocess.Popen(r'explorer "%s"' % path)
#Here I start my update process
multiprocessing.Process(target=update_index).start()
#end of script, now I want that process to continue until finished while main console closes. I only seem to get one or the other.
私も使ってみました:
DETACHED_PROCESS = 0x00000008
CREATE_NO_WINDOW = 0x08000000
subprocess.Popen(command, shell=True, stdin=None, stdout=None,
stderr=None,
creationflags=DETACHED_PROCESS|CREATE_NO_WINDOW)
を、別のコンソールウィンドウが、まだ閉鎖するためのユーザーを防ぐからない方法を得ることができた
は、私は次のようにいくつかのことを試してみましたプロセス。また、このスクリプトをpy2exeのようなもので配布して、後でpythonを使用しない人にもアクセスできるようにしたいので、pythonw.exeを使用していると思われます。または?
通常、スクリプトにコンソールが必要ですか?そうでない場合は、pythonw.exeで実行される.pywファイルを使用します。 – eryksun
ところで、 'CREATE_NO_WINDOW'は' DETACHED_PROCESS'も使用すると無視されます。なぜなら、それらを組み合わせる意味がないからです。 'DETACHED_PROCESS'は、独自のコンソールウィンドウを作成するだけなので、子コンソールプロセスを起動しない場合にのみ、コンソールなしでコンソールアプリケーションを実行する意味があります。このフラグを使用すると、標準ハンドルを 'NUL'デバイスにリダイレクトする必要があります。 'CREATE_NO_WINDOW'はウィンドウレスのコンソールを継承するため、子プロセスのために働きます。同様に、 'STARTUPINFO'を使ってコンソールウィンドウを隠すことができます。 – eryksun
はい、通常、スクリプトにはコンソールが必要です。最初の部分ではユーザーが2つの質問に答えることを約束しました。少なくともそれが今行われていることは、コンソール以外のウィンドウでこれらの質問を促す可能性があることです。私がオフィスに戻ったときに試してみます。サブプロセスメソッドのフラグについては、私は彼らがどのように動作するかを知りません。私はそれらを見つけて、さまざまな組み合わせを試しました。もう少し詳細を教えてくれてありがとう! – Saftblandaren