2017-09-12 10 views
0

私は、「インデックスファイル」を使用する小さなアプリケーションを作成して、エクスプローラーのフォルダを数回押すだけで開くことができます。とにかく、アプリケーションがシャットダウンするたびに、「バックグラウンドプロセス」でそのインデックスファイルを更新したいと思います。インデックスファイルを更新するということは、ネットワークをスキャンすることを意味し、リモートユーザーによっては数分かかることがあります。そのため、ユーザーがプロセスを中断するのを避けるために、スキャンプロセス中にコンソールを非表示にしたいのです。プロセスの実行中にコンソールを閉じる

#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を使用していると思われます。または?

+0

通常、スクリプトにコンソールが必要ですか?そうでない場合は、pythonw.exeで実行される.pywファイルを使用します。 – eryksun

+0

ところで、 'CREATE_NO_WINDOW'は' DETACHED_PROCESS'も使用すると無視されます。なぜなら、それらを組み合わせる意味がないからです。 'DETACHED_PROCESS'は、独自のコンソールウィンドウを作成するだけなので、子コンソールプロセスを起動しない場合にのみ、コンソールなしでコンソールアプリケーションを実行する意味があります。このフラグを使用すると、標準ハンドルを 'NUL'デバイスにリダイレクトする必要があります。 'CREATE_NO_WINDOW'はウィンドウレスのコンソールを継承するため、子プロセスのために働きます。同様に、 'STARTUPINFO'を使ってコンソールウィンドウを隠すことができます。 – eryksun

+0

はい、通常、スクリプトにはコンソールが必要です。最初の部分ではユーザーが2つの質問に答えることを約束しました。少なくともそれが今行われていることは、コンソール以外のウィンドウでこれらの質問を促す可能性があることです。私がオフィスに戻ったときに試してみます。サブプロセスメソッドのフラグについては、私は彼らがどのように動作するかを知りません。私はそれらを見つけて、さまざまな組み合わせを試しました。もう少し詳細を教えてくれてありがとう! – Saftblandaren

答えて

0

それはあなたが探している答えではありませんが、システムアーキテクチャを再設計することができます。ソケットオーバーで実際のアプリケーションと通信しているサーバープロセスとしてインデックスアップデータを作成します。次に、インデックス・アップデーター・サーバー・プロセスを(別のマシン上でも)連続して実行させ、インデックス・アップデーター・プロセスにすべての時間を費やす作業をさせるだけです。

+0

あなたが言ったように、正確には私が探しているものではありません。確かにそれは解決策かもしれませんが、私はこのような大掛かりなスクリプトを作りたくありませんでした。そのようなサービスを設定することは、かなり多くの仕事を意味し、そのようなサービスを提供できる他の人々を同僚に巻き込むことを意味します。ネットワークに保存されているインデックスファイルと比較して、使用時に更新されます。 – Saftblandaren

0

特定の間隔で発生するバックグラウンドタスクを実行したい場合は、cronを使用します。バックグラウンドでコマンドを実行し、コンソールからログアウトしてもコマンドを実行し続ける場合は、nohupを使用します。

+0

この質問はWindows用のタグで、OPのコードはWindows用です(たとえば、 "explorer"を実行し、 'creationflags'を使用している)。 – eryksun

関連する問題