ホームページ >バックエンド開発 >Python チュートリアル >Python で stdout と stderr の両方をサブプロセスからファイルとターミナルに同時にリダイレクトするにはどうすればよいですか?

Python で stdout と stderr の両方をサブプロセスからファイルとターミナルに同時にリダイレクトするにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-04 04:13:01493ブラウズ

How can I redirect both stdout and stderr from a subprocess to files and the terminal simultaneously in Python?

Python のサブプロセスによる出力リダイレクト: ファイルとターミナルの同時実行

Python の subprocess.call 関数を利用して複数の実行可能ファイルを実行する場合、ユーザーは次のことを望むかもしれません。これを実現するには、subprocess.call を使用する代わりに、stdout=PIPE 引数を指定して Popen 関数を直接使用します。これにより、p.stdout:

からの読み取りが可能になります。この変更された関数を使用すると、ユーザーは端末に出力しながら stdout および stderr のファイルを指定できます。例:
import sys
from subprocess import Popen, PIPE

def tee(infile, *files):
    for line in iter(infile.readline, b""):
        for f in files:
            f.write(line)

def teed_call(cmd_args, stdout=None, stderr=None):
    p = Popen(
        cmd_args,
        stdout=PIPE if stdout is not None else None,
        stderr=PIPE if stderr is not None else None
    )
    if stdout is not None:
        tee(p.stdout, stdout, getattr(sys.stdout, "buffer", sys.stdout))
    if stderr is not None:
        tee(p.stderr, stderr, getattr(sys.stderr, "buffer", sys.stderr))
    for t in threads:
        t.join()
    return p.wait()

以上がPython で stdout と stderr の両方をサブプロセスからファイルとターミナルに同時にリダイレクトするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。