対話型スクリプトでティーを含むリアルタイム印刷ステートメント

対話型スクリプトでティーを含むリアルタイム印刷ステートメント

long_interactive_script.py何千もの文を含むプログラムがありますprinttee出力を保存できるようにプログラム(または代替プログラム)をパイプしたいと思います。

もし私がするなら

long_interactive_script.py | tee logfile.txt

Pythonはprint文を4Kバッファに入れて、

何も、何も、何も、何も、言葉が多い! 、何も、何も、単語の途中にsudoプロンプトがあります、何も、何も、多くのテキストがあります!

バッファを避けるために、以下を試しました。

unbuffer long_interactive_script.py | tee logfile.txt

しかし、これは私のスクリプトの対話を中断します。だからスクリプトが壊れたらSudoヒント、停止しました。

sudo注:スクリプトを実行する前に簡単な操作を実行することはできません。インタラクティブスクリプトは特定のランタイムにのみ必要であり、いつ必要なのかを尋ねたくsudoありません。sudo

もっと...

stdbuf -oL long_interactive_script.py | tee -a logfile.txt

ある程度動作します。必要なデータをすべて取得しましたが、次のエラーも発生します。

ERROR: ld.so: object '/usr/lib64/coreutils/libstdbuf.so' from LD_PRELOAD cannot be preloaded: ignored.

ベストアンサー1

Pythonの標準出力ストリームのサイズが0のバッファを指定します。-uこのフラグまたは次の文を使用してPythonを呼び出すことでこれを行うことができます。

sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)

おすすめ記事