python中文件变化监控示例(watchdog)


Posted in Python onOctober 16, 2017

在python中文件监控主要有两个库,一个是pyinotify ( https://github.com/seb-m/pyinotify/wiki ),一个是watchdog(http://pythonhosted.org/watchdog/)。pyinotify依赖于Linux平台的inotify,后者则对不同平台的的事件都进行了封装。因为我主要用于Windows平台,所以下面着重介绍watchdog(推荐大家阅读一下watchdog实现源码,有利于深刻的理解其中的原理)。

watchdog在不同的平台使用不同的方法进行文件检测。在init.py中发现了如下注释:

|Inotify| Linux 2.6.13+ ``inotify(7)`` based observer
|FSEvents| Mac OS X FSEvents based observer
|Kqueue| Mac OS X and BSD with kqueue(2) ``kqueue(2)`` based observer
|WinApi|(ReadDirectoryChangesW) MS Windows Windows API-based observer
|Polling| Any fallback implementation

给出示例代码如下:

from watchdog.observers import Observer
from watchdog.events import *
import time

class FileEventHandler(FileSystemEventHandler):
def __init__(self):
FileSystemEventHandler.__init__(self)

def on_moved(self, event):
if event.is_directory:
print("directory moved from {0} to {1}".format(event.src_path,event.dest_path))
else:
print("file moved from {0} to {1}".format(event.src_path,event.dest_path))

def on_created(self, event):
if event.is_directory:
print("directory created:{0}".format(event.src_path))
else:
print("file created:{0}".format(event.src_path))

def on_deleted(self, event):
if event.is_directory:
print("directory deleted:{0}".format(event.src_path))
else:
print("file deleted:{0}".format(event.src_path))

def on_modified(self, event):
if event.is_directory:
print("directory modified:{0}".format(event.src_path))
else:
print("file modified:{0}".format(event.src_path))

if __name__ == "__main__":
observer = Observer()
event_handler = FileEventHandler()
observer.schedule(event_handler,"d:/dcm",True)
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()

watchdog主要采用观察者模型(废话,从变量命名就可以看出来)。主要有三个角色:observer,event_handler,被监控的文件夹。三者原本是独立的,主要通过observer.schedule函数将三者串起来,意思为observer不断检测调用平台依赖代码对监控文件夹进行变动检测,当发现改变时,通知event_handler处理。最后特别推荐读者有时间可以阅读一下watchdog的源码,写的易懂而且架构很好。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python随机数random模块使用指南
Sep 09 Python
Python3的urllib.parse常用函数小结(urlencode,quote,quote_plus,unquote,unquote_plus等)
Sep 18 Python
Python实现将doc转化pdf格式文档的方法
Jan 19 Python
python使用TensorFlow进行图像处理的方法
Feb 28 Python
Python 删除连续出现的指定字符的实例
Jun 29 Python
Python线性拟合实现函数与用法示例
Dec 13 Python
win8.1安装Python 2.7版环境图文详解
Jul 01 Python
python实现大文件分割与合并
Jul 22 Python
如何在 Django 模板中输出 "{{"
Jan 24 Python
python实现用户名密码校验
Mar 18 Python
python调用win32接口进行截图的示例
Nov 11 Python
python 实现两个变量值进行交换的n种操作
Jun 02 Python
python中import reload __import__的区别详解
Oct 16 #Python
使用Python操作excel文件的实例代码
Oct 15 #Python
python出现"IndentationError: unexpected indent"错误解决办法
Oct 15 #Python
python 二分查找和快速排序实例详解
Oct 13 #Python
Python实现的排列组合计算操作示例
Oct 13 #Python
python numpy函数中的linspace创建等差数列详解
Oct 13 #Python
Python配置mysql的教程(推荐)
Oct 13 #Python
You might like
收集的二十一个实用便利的PHP函数代码
2010/04/22 PHP
smarty中先strip_tags过滤html标签后truncate截取文章运用
2010/10/25 PHP
php与mysql建立连接并执行SQL语句的代码
2011/07/04 PHP
CentOS下与Apache连接的PHP多版本共存方案实现详解
2015/12/19 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
2017/12/21 PHP
PHP7使用ODBC连接SQL Server2008 R2数据库示例【基于thinkPHP5.1框架】
2019/05/06 PHP
CSS+Table图文混排中实现文本自适应图片宽度(超简单+跨所有浏览器)
2009/02/14 Javascript
Jquery 自定义动画概述及示例
2013/03/29 Javascript
jQuery将多条数据插入模态框的示例代码
2014/09/25 Javascript
Javascript对象字面量的理解
2016/06/22 Javascript
jquery实时获取时间的简单实例
2017/01/26 Javascript
JavaScript闭包_动力节点Java学院整理
2017/06/27 Javascript
Angular2.0实现modal对话框的方法示例
2018/02/18 Javascript
详解js跨域请求的两种方式,支持post请求
2018/05/05 Javascript
Rollup处理并打包JS文件项目实例代码
2018/05/31 Javascript
vue 双向数据绑定的实现学习之监听器的实现方法
2018/11/30 Javascript
python计算书页码的统计数字问题实例
2014/09/26 Python
Python读取mp3中ID3信息的方法
2015/03/05 Python
python使用chardet判断字符串编码的方法
2015/03/13 Python
tensorflow saver 保存和恢复指定 tensor的实例讲解
2018/07/26 Python
用Python和WordCloud绘制词云的实现方法(内附让字体清晰的秘笈)
2019/01/08 Python
PyTorch中Tensor的拼接与拆分的实现
2019/08/18 Python
在python Numpy中求向量和矩阵的范数实例
2019/08/26 Python
python使用Geany编辑器配置方法
2020/02/21 Python
python 伯努利分布详解
2020/02/25 Python
Python嵌入C/C++进行开发详解
2020/06/09 Python
Python爬虫爬取微信朋友圈
2020/08/06 Python
解决Ubuntu18中的pycharm不能调用tensorflow-gpu的问题
2020/09/17 Python
Java程序员面试题
2013/07/15 面试题
邮政员工辞职信
2014/01/16 职场文书
迎元旦广播稿
2014/02/22 职场文书
作文评语大全
2014/04/23 职场文书
我的教育故事演讲稿
2014/05/04 职场文书
2016年9月份红领巾广播稿
2015/12/21 职场文书
Python中glob库实现文件名的匹配
2021/06/18 Python
Shell脚本一键安装Nginx服务自定义Nginx版本
2022/03/20 Servers