Python のサブプロセスと同時にプロセス出力をターミナルとファイルに書き込む
subprocess.call() を使用して複数の実行可能ファイルを実行する場合、出力はターミナルと指定されたファイルの両方に表示されます。ただし、デフォルトの動作では、ファイルまたは端末への出力リダイレクトのみが許可されます。
この制限を克服するには、Popen を stdout=PIPE 引数と直接組み合わせて使用することを検討してください。これにより、Popen オブジェクトの stdout 属性から出力を読み取ることができるようになります。
目的の動作を実現するには、次の手順を実行します。
これらの関数の使用方法の例を次に示します。
<code class="python">import sys from subprocess import Popen, PIPE from threading import Thread def tee(infile, *files): ... def teed_call(cmd_args, **kwargs): ... outf, errf = open("out.txt", "wb"), open("err.txt", "wb") assert not teed_call(["cat", __file__], stdout=None, stderr=errf) assert not teed_call(["echo", "abc"], stdout=outf, stderr=errf, bufsize=0) assert teed_call(["gcc", "a b"], close_fds=True, stdout=outf, stderr=errf)</code>
このコードは、出力を両方に効果的に書き込みます。実行されたコマンドごとにファイルとターミナルを同時に実行します。
以上がPython でサブプロセスの出力をターミナルとファイルの両方に同時に書き込むにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。