python使用watchdog实现文件资源监控
Python文件监控库watchdogs简介
随着Python在各种应用领域中的广泛使用,其生态环境也在持续繁荣,特别是各种第三方库的诞生,极大地丰富了开发者的工具箱。在众多库中, watchdog 作为一个高效的文件系统监控库,对于实时响应文件系统的各种事件(如文件创建、修改、删除等)提供了极大便利。无论是在需要监控项目文件变化以触发自动化构建的开发场景,还是在需要日志记录、文件备份等运维任务中, watchdog 都能发挥重要的作用。
文件资源监控
安装:pip install watchdog
watchdog 支持跨平台文件资源监控,可以检测指定文件夹下文件及文件夹变动,当出现不同变动(新增、删除、修改)后,可进行相应处理。
from time import sleep, strftime from watchdog.observers import Observer from watchdog.events import FileSystemEventHandler class FileMonitoring(FileSystemEventHandler): # event.is_directory 判断是否是目录操作 def on_modified(self, event): # 文件或文件夹被修改时触发(新增、删除及修改文件或文件夹都会被监测为文件夹的修改) tm = strftime("%Y-%m-%d %H:%M:%S") print(f'{tm} 修改文件夹{event.src_path}') def on_created(self, event): # 文件或目录被创建时触发 tm = strftime("%Y-%m-%d %H:%M:%S") if event.is_directory: print(f'{tm} 创建文件夹{event.src_path}') else: print(f'{tm} 创建文件{event.src_path}') def on_deleted(self, event): # 文件或目录被删除时触发 tm = strftime("%Y-%m-%d %H:%M:%S") if event.is_directory: print(f'{tm} 删除文件夹{event.src_path}') else: print(f'{tm} 删除文件{event.src_path}') def on_moved(self, event): # 目录的创建和删除操作,被Watchdog视为移动操作,因此通过on_moved方法进行捕捉,重命名也可用此捕获。 tm = strftime("%Y-%m-%d %H:%M:%S") if event.is_directory: print(f'{tm} 重命名文件夹:文件夹{event.src_path} 重命名为 {event.dest_path}') else: print(f'{tm} 重命名文件:文件{event.src_path} 重命名为 {event.dest_path}') class MyFileMonitor(): def __init__(self): self.event_handler = FileMonitoring() # 初始化事件处理器实例 def sever(self, watched_dir, recursive: bool = True): ''' :param watched_dir: .schedule 方法设置要监控的目录路径和事件处理器 :param recursive: recursive=True 参数以递归地监控目录内的所有子目录 :return: ''' self.observer = Observer() # 初始化观察器 self.observer.schedule(self.event_handler, watched_dir, recursive=recursive) # 将事件处理器关联到观察器 return self.observer def run(self, watched_dir, recursive: bool = True): ''' 启动观察器并进入无限循环,直到用户按下 Ctrl+C 中断程序, observer.stop() 和 observer.join() 来正确停止和清理观察器资源。 ''' observer = self.sever(watched_dir, recursive) observer.start() try: while True: sleep(.1) except KeyboardInterrupt: observer.stop() observer.join()
监测文件夹新增、删除、修改文件夹
在Python中,watchdog
库确实提供了方便的方式来监控文件夹及其内部文件的新增、删除、修改以及重命名等事件。下面是一个简单的示例,展示如何使用 watchdog
来监听一个文件夹中的这些事件
import time from watchdog.observers import Observer from watchdog.events import FileSystemEventHandler # 定义事件处理器类 class MyHandler(FileSystemEventHandler): def on_modified(self, event): print(f'File modified: {event.src_path}') def on_created(self, event): print(f'File created: {event.src_path}') def on_deleted(self, event): print(f'File deleted: {event.src_path}') # 对于文件夹的创建、删除操作,请注意: # 目录级别的事件可通过on_moved方法捕获,因为创建和删除目录也表现为移动事件 def on_moved(self, event): if event.is_directory: what = "Directory" else: what = "File" print(f'{what} moved: {event.src_path} to {event.dest_path}') # 初始化事件处理器实例 event_handler = MyHandler() # 指定要监控的文件夹路径 watched_dir = '/path/to/watch' # 初始化观察器 observer = Observer() # 将事件处理器关联到观察器 observer.schedule(event_handler, watched_dir, recursive=True) # 启动观察器 observer.start() print(f'Starting to watch {watched_dir} for file system events...') try: while True: time.sleep(1) except KeyboardInterrupt: observer.stop() observer.join()
在这个例子中,MyHandler 类继承了 FileSystemEventHandler 并实现了几个方法来处理不同的文件系统事件。on_modified 方法会在文件被修改时触发,on_created 在文件或目录被创建时触发,而 on_deleted 在文件或目录被删除时触发。对于目录的创建和删除操作,由于Watchdog将它们视为移动操作,因此通过 on_moved 方法进行捕捉,并检查 event.is_directory 属性以区分是文件还是目录。
通过 observer.schedule 方法设置要监控的目录路径和事件处理器,并设置 recursive=True 参数以递归地监控目录内的所有子目录。
最后启动观察器并进入无限循环,直到用户按下 Ctrl+C 中断程序,此时会调用 observer.stop() 和 observer.join() 来正确停止和清理观察器资源。
到此这篇关于python使用watchdog实现文件资源监控的文章就介绍到这了,更多相关python watchdog文件资源监控内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
python tensorflow学习之识别单张图片的实现的示例
本篇文章主要介绍了python tensorflow学习之识别单张图片的实现的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-02-02Anaconda+spyder+pycharm的pytorch配置详解(GPU)
这篇文章主要介绍了Anaconda+spyder+pycharm的pytorch配置,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-10-10python list.sort()根据多个关键字排序的方法实现
Python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列,本文详细的介绍了python list.sort()根据多个关键字排序,感兴趣的可以了解一下2021-12-12python GUI库图形界面开发之PyQt5开发环境配置与基础使用
这篇文章主要介绍了python GUI库图形界面开发之PyQt5开发环境配置与基础使用,需要的朋友可以参考下2020-02-02
最新评论