書き込み用に開くときの末尾のファイル

書き込み用に開くときの末尾のファイル

私はファイルに書き続けていますが、別のシェルで追跡したいと思います。しかし、ファイルが書き込み用に開いている限り、

tail -f filename

ファイルをもう一度閉じるまで、すべての新しい行を表示することはできません。

残念ながら、1秒間に数回ファイルを開いて閉じると、データが書き込まれるよりも速く受信されるまでスクリプトの速度が遅くなるため、プロセスはファイルを閉じることができません。

作成はPythonプログラムによって行われます。

ser = serial.Serial('/dev/ttyACM2',9600)
f   = open("filename", "a+")
while True:
    s    = ser.readline()
    f.write(s + "\r\n")

作成中のファイルの内容を表示する方法はありますか?

ベストアンサー1

を使用して表示できない場合は、tailファイルにはありません。

ただし、Pythonプログラムの書き込みバッファに存在する可能性があります。ファイルに書き込む際の慣用的な動作は、Cライブラリがすべての書き込みをオペレーティングシステムにすぐに送信するのではなく、ブロック全体(4096バイトなど)が書き込まれるまで出力をバッファリングすることです。これにより、システムコールのオーバーヘッドが節約されます。これはPythonでも似ています。(Cライブラリを使用するのか、それとも同様のバッファリング自体を実行するのかはわかりませんが、最終結果は同じです。)

端末への出力の場合、デフォルトはラインバッファリングです。改行文字が書き込まれると、バッファが書き込まれます。もちろん、ファイルが閉じられると、すべてのバッファもフラッシュされますが、これは実際にはあまり効率的ではありません。

この問題を解決するには、f.flush()Everyの後に呼び出すf.write()バッファリングを完全に無効にします。この質問にはこれを行ういくつかの方法があります。出力バッファリングの無効化

おすすめ記事