Files

在打開文件以進行寫入時跟踪文件

  • February 22, 2019

我正在不斷地寫入一個文件,我想從另一個 shell 中跟踪它。但似乎只要打開文件進行寫入,

tail -f filename

在文件再次關閉之前無法顯示所有新行。

不幸的是,每秒多次打開和關閉文件會使我的腳本減慢到接收數據的速度快於寫入速度的程度,因此我無法在此過程中關閉文件。

寫作是由一個python程序完成的:

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

沒有辦法查看正在寫入的文件的內容嗎?

如果用 看不到它tail,則它不在文件中。

不過,它可能在 Python 程序的寫入緩衝區中。寫入文件時的習慣行為是 C 庫緩衝輸出,直到寫入一個完整的塊(例如 4096 字節等),而不是立即將所有寫入發送到作業系統。這節省了系統呼叫成本。這在 Python 中是類似的。(我不確定它是否使用 C 庫,或者它本身是否進行類似的緩衝,但最終結果是相同的。)

對於終端的輸出,預設是行緩衝:當寫入換行符時,緩衝區被寫出。當然,如果文件關閉,任何緩衝區也會被刷新,但這確實不是很有效。

要解決此問題,請f.flush()在 each 之後呼叫f.write(),完全禁用緩衝。在這個關於 SO 的問題中有一些方法可以做到這一點:禁用輸出緩衝

引用自:https://unix.stackexchange.com/questions/502349