2

重複の可能性:
Python からプログラムが戻るのを待たずに呼び出す方法

外部の Windows 実行可能ファイルを起動する必要がある PyQt プログラムを作成しています。その時点で、Python プログラムは引き続き実行され、開始された exe ファイルにアクセスする必要はありません。

次のようないくつかのバリエーションを試しました。

process = subprocess.Popen(["vncviewer.exe"]); process.communicate()
subprocess.call("vncviewer.exe")
os.system("vncviewer.exe")
os.system("vncviewer.exe&")
os.system("start vncviewer.exe")

ほとんどの戦略を使用してプログラムを正常に実行できますが、Python スクリプトはプログラムが完了するまでブロックされます。GUI がフリーズして使用できなくなります。

Python にまったく別の無関係なタスクを開始させてから、実行を継続して他のプログラムを開き、開始したプログラムに影響を与えずに Python スクリプトを終了させるにはどうすればよいですか?

4

2 に答える 2

6

PyQt4.QtCore.QProcess.startDetached()プログラムをバックグラウンドで独立して実行します。

QProcess.startDetached('vncviewer.exe')

Dougalによって提案された放置subprocess.Popen()オブジェクトとは異なり、このメソッドで開始されたプロセスは、呼び出しプロセスが終了した後も実行を継続します。

PyQt4プログラムでは、よりも優先QProcesssubprocessます。前者はQtイベントループに統合され、Qt信号を介したサブプロセスとの非同期通信を可能にします。

于 2012-08-23T21:09:40.040 に答える
1

のドキュメントにsubprocess.Popen.communicate()は「プロセスが終了するのを待つ」というフレーズが含まれているため、ブロックされても驚くべきことではありません。

オブジェクトを作成してPopenそのままにしておくと、非同期で実行されます。process.poll()その後、またはprocess.wait()確認したい場合は電話することができます。スクリプトを終了させる前に、それが完了していることを確認する必要があることに注意してください。そうしないと、サブプロセスが不意に強制終了されます。サブプロセスを強制終了せずにスクリプトを終了させるには、コメントで@aleks_misyuk によってリンクされた質問を参照してください。

于 2012-08-23T21:01:15.150 に答える