文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何掌握在Python中监控文件系统的技术

2024-12-03 10:53

关注

本文转载自微信公众号「Python学会」,作者Huangwei AI。转载本文请联系Python学会公众号。   

看门狗watch dog

通过阅读本文,您将了解如何检测对Python应用程序中现有文件所做的更改。我们将使用一个维护良好的模块,叫做看门狗(watchdog)。基于官方文档,watchdog是一个用于监视文件系统事件的Python API库和shell实用程序。

它同时支持Python 2.7和3.4+。但是,对于旧版本,建议您使用watchdog < 0.10.0。在本教程中,我将只介绍Python API库。让我们继续下一节,开始安装必要的模块。

设置

设置是相当简单和直接的pip安装。在继续之前,强烈建议设置一个虚拟环境。有两种方法

安装在PyPI

在终端中运行如下命令。

  1. pip install watchdog 

它将安装PyPI(在撰写本文时为0.10.2)的最新版本。

从代码库安装

此外,您可以在本地文件夹中克隆存储库并正常安装它。首先,让我们使用以下命令克隆它。

  1. git clone --recursive git://github.com/gorakhargosh/watchdog.git 

使用以下命令更改工作目录。确保它在工作目录中包含一个名为setup.py的文件。

  1. cd watchdog 

运行以下命令安装它。

  1. pip install -e. 

直接从存储库克隆它的一个主要优点是,您可以获得带有附加特性的最新版本。

您可以在终端中运行以下命令来验证安装是否成功。

  1. pip show watchdog 

让我们继续下一节并开始编写Python代码。

实现

watchdog的主要构建模块基于以下类:

因此,实现就像这样简单:

  1. 创建一个watchdog.observers的实例。观察者线程类。
  2. 使用自己的实现定义事件处理程序的子类,并从中创建实例。
  3. 通过附加事件处理程序的观察者实例调用调度函数。它接受一些其他输入参数,比如要监视的目录的路径。
  4. 启动观察者线程并等待它生成事件,这些事件将触发事件处理程序中的代码。

事件处理程序

当前模块中有4种类型的事件处理程序可用:

  1. FileSystemEventHandler—可以覆盖其中方法的基本文件系统事件处理程序。
  2. PatternMatchingEventHandler——用与正在发生的事件相关的文件路径匹配给定的模式。
  3. RegexMatchingEventHandler -匹配给定的正则表达式和与发生事件相关的文件路径。
  4. LoggingEventHandler—记录捕获的所有事件。

其余的类继承自FileSystemEventHandler,它提供了以下函数供我们重写。

导入

创建一个新的Python文件,并添加以下导入声明。我把它命名为test.py。

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

FileSystemEventHandler的子类

创建一个继承自FileSystemEventHandler的新类,并根据用例相应地覆盖这些函数。我将把它命名为MyHandler,但你可以随意命名它。

  1. class MyHandler(FileSystemEventHandler): 
  2.     def on_any_event(self, event): 
  3.         print(event.event_type, event.src_path) 
  4.  
  5.     def on_created(self, event): 
  6.         print("on_created", event.src_path) 
  7.  
  8.     def on_deleted(self, event): 
  9.         print("on_deleted", event.src_path) 
  10.  
  11.     def on_modified(self, event): 
  12.         print("on_modified", event.src_path) 
  13.  
  14.     def on_moved(self, event): 
  15.         print("on_moved", event.src_path) 

用实现的逻辑替换print语句。对于每个函数,它都有一个名为event的输入参数,该参数包含以下变量:

最有用的参数是src_path,您可以在其中使用它来确定哪个文件被修改,然后再运行相应的逻辑。

  1. if(event.src_path == "./path/file.txt"): 
  2.     print("Execute your logic here!"

观察者和事件

一旦你创建了子类,你就可以和观察者类一起安全地创建它的实例了。为监视过程分配您所选择的路径。我将检查一个新创建的名为json的文件夹。您可以根据自己的喜好修改它。

您也可以设置recursive递归参数,但强烈建议预先定义层次结构并将其设置为false,以防止权限不足或无法访问子文件夹的问题。

调用start将运行该线程,当您在相应的路径中进行修改时,将生成一个事件。

  1. event_handler = MyHandler() 
  2. observer = Observer() 
  3. observer.schedule(event_handler, path='./json/', recursive=False
  4. observer.start() 

测试

为了测试它,你必须实现一个正在运行的循环来防止它退出。退出一个KeyboardInterrupt异常时,调用stop函数来清理资源。

  1. while True
  2.     try: 
  3.         pass 
  4.     except KeyboardInterrupt: 
  5.         observer.stop() 

保存Python文件并在终端中运行它。根据您设置的名称修改名称。

  1. python test.py 

您可以通过创建一个新文档、修改其中的内容并从目录中删除它来轻松地测试它。下面是输出的示例:

 

来源:Python学会内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯