2016-06-01 3 views
1

これは質問のための最良の言い回しではないかもしれません。私は一度に2つのファイルを私の画面で見ようとしています。 私が実行します。マルチテールはどのようにその出力をバッファしますか?

multitail ~/path/to/somefile.err ~/path/to/somefile.out 

私は次の行でPythonスクリプトを持っている:

sys.stdout = open('~/path/to/somefile.out', 'a') 
sys.stderr = open('~/path/to/somefile.err', 'a') 

私のmultitailコマンドに関係なく、私は内のファイルを入れているための、出力のみの私の.outファイルに思えますコマンド。

私は私のスクリプトが実際にファイルに書き込みをしていることを確認しました。

echo "text" >> ~/path/to/somefile.err 

突然私が(前に現れなかったものを含む)multitail画面で.ERRファイルからのすべての出力を参照してください。何も興味深いのは、私は、次のコマンドを実行したときにということでした!

ここでは何が起こっているのですか?

P.S.これはマルチテールを使った初めてのことなので、多分簡単なことを見落としたかもしれません。それが何を意味している場合、私はあなたがbuffering=0(バッファなしの場合)またはbuffering=1のいずれかを渡す必要があり

+1

標準エラー出力(.ERR)は、おそらくバッファリングされており、十分な情報は、それがすべて表示されますその後、バッファリングされた後。あなたのマシン上で 'unbuffer'を探してください。もし存在すれば、個々の出力cmdsを' unbuffer 'することができます( 'python'で何をしているのかわかりません)。おそらく、 'unbuffer python3 mypython.py'を行うことができます。 GNU coreutilsには、同じことをする 'stdbuf'もありますが、別の方法で呼び出す必要があるかもしれません。 'man stdbuf'をチェックしてください。がんばろう。 – shellter

答えて

1

CentOSの7を使用しています(用ラインバッファリング - おそらくあなたが望むもの)openまでお電話インチ

デフォルトはbuffering=-1で、システムに応じた値を持つbuffering=512と同等です。したがって、512バイト(または何でも)が書き込まれるまで何も書き込まれません。


また、あなたはそのデフォルト値にbufferingセットを残し、そしてあなたは、データがファイルに表示するたびに.flush()呼び出すことができます。コマンドが終了し、終値はフラッシュを意味する場合、ファイルを閉じます


あなたはシェルで>>を使用

、。 (あなたが exec >> file.txtを使用して、近くを延期することができます)

関連する問題