Pythonプログラムの実行中にユーザーが自分のプログラムのUI(tkinterを使って構築されたもの)を引き続き使用できるように外部プログラムを呼び出す方法を知りたい。プログラムは、ユーザーがコピーするファイルを選択するのを待っているので、外部プログラムが実行されている間もファイルを選択してコピーできるはずです。外部プログラムはAdobe Flash Playerです。Pythonで外部プログラムを同時に実行する
おそらく、私はスレッド「ワーカー」クラスを持っているという事実のためにいくつかの問題がありますか?コピー中に進行状況バーが更新されます。 Flash Playerが開いていても、プログレスバーを更新したいです。
私は
subprocess
モジュールを試しました。プログラムは実行されますが、Flash Playerが終了するまでユーザーがUIを使用できなくなります。また、コピーはまだバックグラウンドで発生しているようですが、Flash Playerが終了するまでプログレスバーは更新されません。def run_clip(): flash_filepath = "C:\\path\\to\\file.exe" # halts UI until flash player is closed... subprocess.call([flash_filepath])
次に、私は(私はとにかくのPython 3を使用した)
concurrent.futures
モジュールを使用してみました。私はまだアプリケーションを呼び出すためにsubprocess
を使用しているので、このコードが上記の例とまったく同じように動作することは驚くことではありません。def run_clip(): with futures.ProcessPoolExecutor() as executor: flash_filepath = "C:\\path\\to\\file.exe" executor.submit(subprocess.call(animate_filepath))
subprocess
を使用して、問題の嘘をしていますか?もしそうなら、外部プログラムを呼び出すより良い方法がありますか?前もって感謝します。
偉大な '子=サブプロセス.Popen'はトリックを行います。私はモジュールのメソッドにもっと慣れていなければなりませんが、 'wait'を使うことについての情報をありがとう。 – gary