0

この投稿のアドバイスに従って、Python コードの特定の部分のコンソール出力全体をテキストファイルにリダイレクトしようとしました。

その投稿によると、contextlib.redirect_stdout() で動作するはずですが、カスタム関数 custom_function_with_internal_print_calls() 内に最初の print() コマンドが表示されると、 AttributeError: 'str' object has no attribute 'write' がスローされます。

dummy_file = "dummy_textfile.txt"  # file to which the stdout shall be redirected

with contextlib.redirect_stdout(dummy_file):
    # Direct print()-function call
    print("Informative string which shall go to the textfile instead of the console.")

    # Indirect print()-function calls (internally)
    custom_function_with_internal_print_calls(**kwargs)

編集: 私の特定のケースでは、with-environment 内の print() 関数の代わりに、Python の組み込み print() 関数への内部呼び出しを持つカスタム関数があります。print() 関数が別の関数内に表示されるか、エラーを再現するために最上位に直接表示されるかは問題ではありません。

すでに試したオプション: 他の回避策では、探している解決策が得られないようです。

print() 関数の再定義または

Python 2.7x 用のデコレータを作成する(私は Python 3.7x を使用しているため)、または

を介してprint()関数をファイルオブジェクトにリダイレクトしますprint('Filename:', filename, file=f)。後者は、私の場合、選択した囲まれた関数内のすべてのサブ関数にファイルハンドラーを渡すことを意味します。これは、この特別なケースでは余分なコード変更が多すぎます。

この関数のすべてのコンソール出力をdummy_filewith contextlib.redirect_stdout(dummy_file):にリダイレクトするために、関数にラップされた環境だけを使用できるようにしたいと考えています。

contextlib.redirect_stdout()のドキュメントも役に立ちません。提案をお寄せいただきありがとうございます。

4

1 に答える 1