1 回答

TA貢獻(xiàn)1936條經(jīng)驗(yàn) 獲得超7個(gè)贊
據(jù)我所知Watchdog,僅通知文件是否已修改,但它不會(huì)提供更改的信息,您必須自行檢查。
我看到了兩種顯示新附加內(nèi)容的方法。
首先:保持打開(kāi)的文件,然后read()將只讀取新內(nèi)容。
我的處理程序獲取文件名作為參數(shù)以在啟動(dòng)時(shí)打開(kāi)它并始終保持打開(kāi)狀態(tài)。
在__init__您可以使用read()跳過(guò)現(xiàn)有內(nèi)容
import os
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
class AppendEventHandler(FileSystemEventHandler):
def __init__(self, path):
self.path = path
self.fh = open(path)
self.fh.read() # skip existing content
def on_modified(self, event):
if event.src_path == self.path:
print(self.fh.read())
if __name__ == "__main__":
event_handler = AppendEventHandler(".\\test.log")
observer = Observer()
observer.schedule(event_handler, ".", recursive=True)
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
第二:如果您不想保留打開(kāi)的文件,那么您可以記住它的大小并fh.seek(previous_size)在附加內(nèi)容開(kāi)始時(shí)使用它來(lái)開(kāi)始閱讀。
import os
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
class AppendEventHandler(FileSystemEventHandler):
def __init__(self, path):
self.path = path
self.size = os.stat(path).st_size # remeber previous size
def on_modified(self, event):
if event.src_path == self.path:
new_size = os.stat(self.path).st_size # get new size
if new_size > self.size:
fh = open(self.path)
fh.seek(self.size) # move to appended content (move to end of old content)
print(fh.read())
fh.close()
self.size = new_size # remeber new size
if __name__ == "__main__":
event_handler = AppendEventHandler("./test.log")
observer = Observer()
observer.schedule(event_handler, ".", recursive=True)
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
添加回答
舉報(bào)