私が知る限り、execv は現在のプロセスを追い越し、呼び出された実行可能ファイルが終了すると、プログラムは終了します。同じスクリプト内で execv を複数回呼び出したいのですが、このため、実行できません。
現在のプロセス内で実行され (つまり、同じ stdout に出力され)、プログラムを終了しない execv の代替手段はありますか? もしそうなら、それは何ですか?
はい、使用しますsubprocess
。
os.execv*
ドキュメントから、あなたのタスクには適切ではありません:
これらの関数はすべて新しいプログラムを実行し、現在のプロセスを置き換えます。彼らは戻りません。Unix では、新しい実行可能ファイルが現在のプロセスにロードされ、呼び出し元と同じプロセス ID を持ちます。
したがって、外部の exe を同じ出力に出力したい場合は、次のようにします。
import subprocess
output = subprocess.check_output(['your_exe', 'arg1'])
デフォルトでは、check_output()
標準出力に書き込まれた出力のみを返します。標準出力とエラーの両方を収集する場合は、stderr
引数を使用します。
output = subprocess.check_output(['your_exe', 'arg1'], stderr=subprocess.STDOUT)