0
我試圖創建一個讀取不斷更新的日誌文件並獲取它的每一行的異步函數。這就是我現在所擁有的:Python日誌讀取器
async def log_reader():
with open(LOG_PATH, "r", encoding='utf-8', errors='ignore') as logfile:
logfile.seek(0, os.SEEK_END)
while TRUE:
line = logfile.readline()
if not line:
await asyncio.sleep(0.2)
continue;
<do stuff>
它工作正常,直到文件重新啓動。我在考慮檢查文件的大小是否比它小,這將意味着它被刷新,但我覺得必須有更好的選擇。
歡迎任何提示。
我已經試過您的版本: '開放(LOG_PATH, 「R」,編碼= 'UTF-8',錯誤= '忽略')作爲日誌文件: inodenum = os.stat(LOG_PATH)st_ino中] logfile.seek(0,os.SEEK_END) 同時不client.is_closed: 如果inodenum = os.stat(LOG_PATH)[st_ino中]: inodenum = os.stat(LOG_PATH)[st_ino中] logfile.seek (0,os.SEEK_END)' 但它似乎不適用於我:inode號碼不會更改 – Degranon
@degranon如果inode更改,您不能只是回滾,因爲它是一個新文件。您需要關閉當前的並再次打開相同的路徑。但是,也許你的日誌旋轉只是截斷了文件。 (然後文件大小是唯一的指標)你必須找出一個。 – viraptor