GNU/Linux >> Linux の 問題 >  >> Linux

ファイルに何かが書き込まれるのをテールでライブで監視する

生成時にバッファをパイプ処理するには、バッファを明示的にフラッシュする必要がある場合もあります。これは、通常、パイプのバッファーがいっぱいになったとき (キロバイト単位だと思います)、標準入力メッセージが終了したときにのみ、出力が出力されるためです。これはおそらく読み取り/書き込みを節約するためです。これは、すべての印刷の後、またはループしている場合は、ループ内の最後の印刷の後に行うことができます。

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 最適ではありませんが、ファイルへの書き込み中に出力を表示する代替方法として引き続き使用できますが、デイビーの答えは明らかに正しい最良の答えです。


Linux
  1. パイプでティーを使用しているときにstderrをファイルに書き込むにはどうすればよいですか?

  2. Wget で保存せずにファイルを要求するにはどうすればよいですか?

  3. コマンド出力をファイルと端末にリダイレクト

  1. Tail -f、ファイルが書き込まれなくなったかどうかを判断しますか?

  2. まだ書き込まれているファイルとの rsync の動作は?

  3. iftop - 出力を含むテキスト ファイルを生成する方法は?

  1. Sedでテール出力を着色しますか?

  2. 「?」で始まる行を無視してファイルを出力する方法は?

  3. 出力をファイルと標準出力にリダイレクトする方法