网站首页 > 开源技术 正文
看门狗watch dog
通过阅读本文,您将了解如何检测对Python应用程序中现有文件所做的更改。我们将使用一个维护良好的模块,叫做看门狗(watchdog)。基于官方文档,watchdog是一个用于监视文件系统事件的Python API库和shell实用程序。
它同时支持Python 2.7和3.4+。但是,对于旧版本,建议您使用watchdog < 0.10.0。在本教程中,我将只介绍Python API库。让我们继续下一节,开始安装必要的模块。
设置
设置是相当简单和直接的pip安装。在继续之前,强烈建议设置一个虚拟环境。有两种方法
安装在PyPI
在终端中运行如下命令。
pip install watchdog它将安装PyPI(在撰写本文时为0.10.2)的最新版本。
从代码库安装
此外,您可以在本地文件夹中克隆存储库并正常安装它。首先,让我们使用以下命令克隆它。
git clone --recursive git://github.com/gorakhargosh/watchdog.git使用以下命令更改工作目录。确保它在工作目录中包含一个名为setup.py的文件。
cd watchdog运行以下命令安装它。
pip install -e.直接从存储库克隆它的一个主要优点是,您可以获得带有附加特性的最新版本。
您可以在终端中运行以下命令来验证安装是否成功。
pip show watchdog让我们继续下一节并开始编写Python代码。
实现
watchdog的主要构建模块基于以下类:
- 观察者
 - 事件处理程序
 
因此,实现就像这样简单:
- 创建一个watchdog.observers的实例。观察者线程类。
 - 使用自己的实现定义事件处理程序的子类,并从中创建实例。
 - 通过附加事件处理程序的观察者实例调用调度函数。它接受一些其他输入参数,比如要监视的目录的路径。
 - 启动观察者线程并等待它生成事件,这些事件将触发事件处理程序中的代码。
 
事件处理程序
当前模块中有4种类型的事件处理程序可用:
- FileSystemEventHandler—可以覆盖其中方法的基本文件系统事件处理程序。
 - PatternMatchingEventHandler——用与正在发生的事件相关的文件路径匹配给定的模式。
 - RegexMatchingEventHandler -匹配给定的正则表达式和与发生事件相关的文件路径。
 - LoggingEventHandler—记录捕获的所有事件。
 
其余的类继承自FileSystemEventHandler,它提供了以下函数供我们重写。
- on_any_event -捕获所有事件处理程序。
 - on_created -创建文件或目录时调用。
 - on_deleted -当文件或目录被删除时调用。
 - on_modified -当文件或目录被修改时调用。
 - on_moved -当文件或目录被移动或重命名时调用。
 
导入
创建一个新的Python文件,并添加以下导入声明。我把它命名为test.py。
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandlerFileSystemEventHandler的子类
创建一个继承自FileSystemEventHandler的新类,并根据用例相应地覆盖这些函数。我将把它命名为MyHandler,但你可以随意命名它。
class MyHandler(FileSystemEventHandler):
    def on_any_event(self, event):
        print(event.event_type, event.src_path)
    def on_created(self, event):
        print("on_created", event.src_path)
    def on_deleted(self, event):
        print("on_deleted", event.src_path)
    def on_modified(self, event):
        print("on_modified", event.src_path)
    def on_moved(self, event):
        print("on_moved", event.src_path)用实现的逻辑替换print语句。对于每个函数,它都有一个名为event的输入参数,该参数包含以下变量:
- event_type—字符串形式的事件类型。默认为没有。
 - is_directory -如果为目录触发事件,则为True;否则错误。
 - src_path—触发此事件的文件系统对象的源路径。
 
最有用的参数是src_path,您可以在其中使用它来确定哪个文件被修改,然后再运行相应的逻辑。
if(event.src_path == "./path/file.txt"):
    print("Execute your logic here!")观察者和事件
一旦你创建了子类,你就可以和观察者类一起安全地创建它的实例了。为监视过程分配您所选择的路径。我将检查一个新创建的名为json的文件夹。您可以根据自己的喜好修改它。
您也可以设置recursive递归参数,但强烈建议预先定义层次结构并将其设置为false,以防止权限不足或无法访问子文件夹的问题。
调用start将运行该线程,当您在相应的路径中进行修改时,将生成一个事件。
event_handler = MyHandler()
observer = Observer()
observer.schedule(event_handler, path='./json/', recursive=False)
observer.start()测试
为了测试它,你必须实现一个正在运行的循环来防止它退出。退出一个KeyboardInterrupt异常时,调用stop函数来清理资源。
while True:
    try:
        pass
    except KeyboardInterrupt:
        observer.stop()保存Python文件并在终端中运行它。根据您设置的名称修改名称。
python test.py您可以通过创建一个新文档、修改其中的内容并从目录中删除它来轻松地测试它。下面是输出的示例:
原文链接:
https://levelup.gitconnected.com/how-to-monitor-file-system-events-in-python-e8e0ed6ec2c
猜你喜欢
- 2024-10-30 写shell脚本其实就是写逻辑——监控Nginx服务的Shell脚本
 - 2024-10-30 卷积神经网络在乳腺癌分类中的应用
 - 2024-10-30 在Wireshark中查看Check Point fw monitor文件
 - 2024-10-30 接口测试工具postman之file工具栏的功能介绍
 - 2024-10-30 Linux 下 JNA 调用动态连接库文件 so
 - 2024-10-30 C/C++恶意代码盘点(二):后门丨文件监控丨自删除功能
 - 2024-10-30 让TP5.0在SWOOLE上飞起来(tp swoole)
 - 2024-07-22 笔记本电脑常见的五大问题详解!(笔记本电脑常见的五大问题详解图)
 - 2024-07-22 你比个手势,AI就识别出Emoji,浏览器上跑:已开源,推特2.8万赞
 - 2024-07-22 瑞芯微-I2S | ALSA基础(瑞芯微官网)
 
欢迎 你 发表评论:
- 1590℃北京那些看上去很牛的车牌们!(北京厉害车牌)
 - 1107℃2025年度视频去水印软件TOP5对比:哪款最值得用
 - 683℃《我的世界》不同版本的差异 ——新手向
 - 595℃新疆话里的“虫子”
 - 516℃中兴光猫 Telnet下设置大全(中兴光猫命令大全)
 - 513℃蓝牙设备配对失败的系统性解决方案与技术解析
 - 510℃未备份电脑文件数据恢复的七种方法
 - 488℃工艺管道常用英文缩写 英汉对照
 
- 最近发表
 
- 标签列表
 - 
- jdk (81)
 - putty (66)
 - rufus (78)
 - 内网穿透 (89)
 - okhttp (70)
 - powertoys (74)
 - windowsterminal (81)
 - netcat (65)
 - ghostscript (65)
 - veracrypt (65)
 - asp.netcore (70)
 - wrk (67)
 - aspose.words (80)
 - itk (80)
 - ajaxfileupload.js (66)
 - sqlhelper (67)
 - express.js (67)
 - phpmailer (67)
 - xjar (70)
 - redisclient (78)
 - wakeonlan (66)
 - tinygo (85)
 - startbbs (72)
 - webftp (82)
 - vsvim (79)
 
 

本文暂时没有评论,来添加一个吧(●'◡'●)