生成時にバッファをパイプ処理するには、バッファを明示的にフラッシュする必要がある場合もあります。これは、通常、パイプのバッファーがいっぱいになったとき (キロバイト単位だと思います)、標準入力メッセージが終了したときにのみ、出力が出力されるためです。これはおそらく読み取り/書き込みを節約するためです。これは、すべての印刷の後、またはループしている場合は、ループ内の最後の印刷の後に行うことができます。
import sys
...
print('Some message')
sys.stdout.flush()
unbuffered フラグを指定して python を実行します:
python -u myprog.py > output.txt
出力はリアルタイムで印刷されます。
ライブファイルを追跡しようとする代わりに、 tee
を使用してください 代わりは。あなたがやろうとしていることを正確に行うために作られました。
男性ティーより:
<ブロック引用>tee(1) - Linux man ページ
名前 tee - 標準入力から読み取り、標準出力とファイルに書き込みます
あらすじ
tee [OPTION]... [FILE]...
説明
標準入力を各 FILE にコピーし、標準出力にもコピーします。
-a, --append
append to the given FILEs, do not overwrite
-i, --ignore-interrupts
ignore interrupt signals
--help
display this help and exit
--version
output version information and exit
FILE が - の場合、再度標準出力にコピーします。
したがって、あなたの場合は次のように実行します:
python myprog.py | tee output.txt
編集:他の人が指摘したように、この回答は sys.stdout.flush()
でない限り、OP が最初に抱えていたのと同じ問題に遭遇します。 Daveyの受け入れられた回答で説明されているように、pythonプログラムで使用されています。この回答を投稿する前に行ったテストは、OP のユースケースを正確に反映していませんでした。
tee
最適ではありませんが、ファイルへの書き込み中に出力を表示する代替方法として引き続き使用できますが、デイビーの答えは明らかに正しい最良の答えです。