web-dev-qa-db-ja.com

プログラムが戻るのを待たずにpythonからプログラムを呼び出す方法

pythonからプログラムが戻るのを待たずにプログラムを呼び出す方法はありますか?プログラムをディレクトリにコピーしてそのプログラムを実行するスクリプトを作成しましたが、pythonからプログラムを呼び出すとpythonスクリプトは、起動したプログラムが終了するまで終了しません。os.systemとPopenを試しました。これを行う別の方法はありますか?

追加情報:os.P_DETACHを含むos.spawnlはまだ機能しません。ドキュメントによると、「P_DETACHはP_NOWAITに似ていますが、新しいプロセスは呼び出しプロセスのコンソールから切り離されています」。しかし、それはどういうわけか私の呼び出しプロセスにアタッチされています(呼び出しスクリプトは、呼び出された実行可能ファイルのいずれかが戻るまで終了しません)

プログラム:

os.system("start test.exe")
print "Done"

test.exeを実行した後、Doneを出力します。ただし、スクリプトの実行は終了しません(スクリプトプロセスはまだ実行中です)。デーモンスレッドとPopenをP_DETACHで作成してみましたが、まだ実行できません。

21
maranas

前の質問 にプロセスを切り離す方法の解決策を投稿しました。

9
newtover

Popenpoll()の代わりにwait()を使用すると、ブロックされず、プログラムの実行を待機しません。ただし、プログラム全体の待機を実際に停止する唯一の方法は、プロセスを開始するデーモンスレッドを作成することです。そうすれば、それを待つ必要はありません。

class MyThread(threading.Thread):
    def run(self):
        '''Start your thread here'''
        pass

thread = MyThread()
thread.daemon = True
thread.start()
4
Wolph

Windowsでは、Shell STARTコマンドを使用してプログラムを呼び出すと、親プロセスを「解放」して終了できるようになります。詳細については、DOSプロンプトでSTART /?を試してください。

2
Peter Hansen