本文转载自微信公众号「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
在终端中运行如下命令。
- 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的主要构建模块基于以下类:
因此,实现就像这样简单:
事件处理程序
当前模块中有4种类型的事件处理程序可用:
其余的类继承自FileSystemEventHandler,它提供了以下函数供我们重写。
导入
创建一个新的Python文件,并添加以下导入声明。我把它命名为test.py。
- from watchdog.observers import Observer
- from watchdog.events import FileSystemEventHandler
FileSystemEventHandler的子类
创建一个继承自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的输入参数,该参数包含以下变量:
最有用的参数是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
您可以通过创建一个新文档、修改其中的内容并从目录中删除它来轻松地测试它。下面是输出的示例:
本文名称:如何掌握在Python中监控文件系统的技术
网站URL:http://www.36103.cn/qtweb/news13/26463.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联