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

Mary-Kate Olsen
リリース: 2024-11-04 04:13:01
オリジナル
426 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!