python在windows中监听文件是否有操作

pip install watchdog 安装需要的包

class MyHandler(FileSystemEventHandler):
    def __init__(self):
        f = open('config.js')
        j = json.load(f)
        for c in j["config"]:
            if c["file_path"]:
                self.file_path = c["file_path"]
                break
        else:
            raise RuntimeError('没有设置有效配置参数')
    def on_modified(self, event):
        print("文件被修改了 %s" % event.src_path)

    def on_created(self, event):
        # start_new_thread启动线程
        # 参数一:调用的方法名 参数二:元组传递调用的方法要使用的参数
        _thread.start_new_thread(theard_method,(event.src_path,))
        watch_files=get_img_file(event.src_path)
        if len(watch_files)>0:
            insertsql_dectimg(watch_files)
        print("文件被创建了 %s" % event.src_path)

if __name__ == "__main__":
    event_handler = MyHandler()
    observer = Observer()
    observer.schedule(event_handler, event_handler.file_path, recursive=True)
    observer.start()
    #observer.join()

文件系统事件类

文件系统事件基类定义如下:

watchdog.events.FileSystemEvent(event_type, src_path, is_directory=False)#event.event_type - 事件类型,为 moved / deleted / created / modified 其中之一#event.src_path - 触发该事件的文件或目录路径#event.is_directory - 该事件是否由一个目录触发

由 watchdog.events.FileSystemEvent 基类派生的子类如下:

watchdog.events.FileDeletedEvent()#文件被删除时触发该事件

watchdog.events.DirDeletedEvent()#目录被删除时触发该事件

watchdog.events.FileCreatedEvent()#文件被创建时触发该事件

watchdog.events.DirCreatedEvent()#目录被创建时触发该事件

watchdog.events.FileModifiedEvent()#文件被修改时触发该事件(修改文件内容、修改文件inode信息如权限和访问时间,都会触发该事件)

watchdog.events.DirModifiedEvent()#目录被修改时触发该事件

watchdog.events.FileMovedEvent()#文件被移动或重命名时触发该事件,因为涉及文件移动,所以除了event.src_path表示原路径,还有event.dest_path表示目的路径

watchdog.events.DirMovedEvent()#目录被移动或重命名时触发该事件,因为涉及文件移动,所以除了event.src_path表示原路径,还有event.dest_path表示目的路径

文件系统事件处理类

watchdog.events.FileSystemEventHandler 是事件处理器的基类,用于处理事件,用户需继承该类,并在子类中重写对应方法。需要用户重写的方法有:

self.on_any_event(event)#任何事件发生都会首先执行该方法,该方法默认为空,dispatch()方法会先执行该方法,然后再把 event 分派给其他方法处理

self.on_moved(event)#处理 DirMovedEvent 和 FileMovedEvent 事件,默认为空

self.on_created(event)#处理 DirCreatedEvent 和 FileCreatedEvent 事件,默认为空

self.on_deleted(event)#处理 DirDeletedEvent 和 FileDeletedEvent 事件,默认为空

self.on_modified(event)#处理 DirModifiedEvent 和 FileModifiedEvent 事件,默认为空

以上方法中,event 有几个属性可用:

event.is_directory - 触发事件的是否为文件夹

event.src_path - 源路径

event.dest_path - 目标路径

 

posted @ 2021-12-02 11:14  zZzZzZzZ~~  阅读(351)  评论(0)    收藏  举报