ファイルとターミナルの両方に出力して実行可能ファイルを実行する
subprocess.call() を使用して複数の実行可能ファイルを実行する場合、標準出力とエラー出力はファイルと端末の両方に出力されます。ただし、stdout=outf または stderr=errf を使用すると、出力が端末には表示されず、ファイルに書き込まれることが指定されるだけです。
目的の動作を実現するには、Popen クラスを直接利用し、 stdout=PIPE 引数を使用して、標準出力をファイルではなくパイプでキャプチャします。その方法は次のとおりです。
<code class="python">from subprocess import Popen, PIPE with open("out.txt", "wb") as outf, open("err.txt", "wb") as errf: p = Popen(["cat", __file__], stdout=PIPE, stderr=errf) # Read the output from the pipe output = p.stdout.read() # Write the output to the terminal print(output) # Ensure the process completes and wait for the output to be fully written p.wait()</code>
この例では、パイプ内の stdout をキャプチャし、p.stdout.read() を使用してそれを読み取ります。次に、プロセスが完了し、出力がファイルに完全に書き込まれるまで待機する前に、出力を端末に出力します。これにより、出力が端末に表示されるだけでなく、指定されたファイルに書き込まれることが保証されます。
以上が実行可能出力をファイルとターミナルの両方にリダイレクトするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。