python的文件监控模块主要有两种,分别为pyinotify和watchdog。其中pyinotify只支持linux,而watchdog支持跨平台。

安装

使用pip安装

pip install pyinotify
pip install watchdog

快速开始

pyinotify项目地址:https://github.com/seb-m/pyinotify 由于pyinotify不支持mac,所以没有深入研究。下面是一个简单的实例。

import pyinotify

class EventHandler(pyinotify.ProcessEvent):

    def process_IN_CREATE(self, event):
        print('create:', event.pathname)

    def process_IN_DELETE(self, event):
        print('delete:', event.pathname)

    def process_IN_MODIFY(self, event):
        print('modify:', event.pathname)

if __name__ == "__main__":
    wm = pyinotify.WatchManager()
    mask = pyinotify.IN_CREATE | pyinotify.IN_DELETE | pyinotify.IN_MODIFY
    notifier = pyinotify.Notifier(wm, EventHandler())
    wm.add_watch("./", mask, rec=True, auto_add=True)
    notifier.loop()

watchdog项目地址:https://github.com/gorakhargosh/watchdog 这里写了一个简单的MyHandler类,对不同的监控信息进行打印。

from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler

class MyHandler(FileSystemEventHandler):   
    
    def on_modified(self, event):
        print("log file %s modeified!" % event.src_path)
    
    def on_moved(self, event):
        print("log file %s moved!" % event)
        
    def on_created(self, event):
        print("log file %s created!" % event.src_path)
        
    def on_deleted(self, event):
        print("log file %s deleted!" % event.src_path)


if __name__ == "__main__":
    event_handler = MyHandler()
    observer = Observer()
    observer.schedule(event_handler, path='.', recursive=True)
    observer.start()

    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()