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通过字典dict判断指定键值是否存在的方法
Mar 21 Python
Python将图片批量从png格式转换至WebP格式
Aug 22 Python
Python自定义简单图轴简单实例
Jan 08 Python
python正则中最短匹配实现代码
Jan 16 Python
Python绘图Matplotlib之坐标轴及刻度总结
Jun 28 Python
利用PyCharm操作Github(仓库新建、更新,代码回滚)
Dec 18 Python
在Tensorflow中查看权重的实现
Jan 24 Python
Python集合操作方法详解
Feb 09 Python
浅谈在JupyterNotebook下导入自己的模块的问题
Apr 16 Python
浅谈python多线程和多线程变量共享问题介绍
Apr 17 Python
Python调用百度OCR实现图片文字识别的示例代码
Jul 17 Python
Django crontab定时任务模块操作方法解析
Sep 10 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
《被神捡到的男人》动画化计划进行中!
2020/03/06 日漫
PHP 采集程序中常用的函数
2009/12/09 PHP
php连接mssql数据库的几种方法
2013/02/21 PHP
如何在smarty中增加类似foreach的功能自动加载数据
2013/06/26 PHP
php+mysql删除指定编号员工信息的方法
2015/01/14 PHP
避免Smarty与CSS语法冲突的方法
2015/03/02 PHP
PHP设计模式之模板模式定义与用法详解
2018/12/20 PHP
PHP基于timestamp和nonce实现的防止重放攻击方案分析
2019/07/26 PHP
提高 DHTML 页面性能
2006/12/25 Javascript
Prototype Class对象学习
2009/07/19 Javascript
html 锁定页面(js遮罩层弹出div效果)
2009/10/27 Javascript
js 创建书签小工具之理论
2011/02/25 Javascript
node.js中的http.request.end方法使用说明
2014/12/10 Javascript
JS实现在线统计一个页面内鼠标点击次数的方法
2015/02/28 Javascript
JavaScript生成随机字符串的方法
2015/03/19 Javascript
JS中多步骤多分步的StepJump组件实例详解
2016/04/01 Javascript
基于RequireJS和JQuery的模块化编程——常见问题全面解析
2016/04/14 Javascript
JavaScript实现阿拉伯数字和中文数字互相转换
2016/06/12 Javascript
基于Vue.js实现数字拼图游戏
2016/08/02 Javascript
轻松掌握JavaScript代理模式
2016/08/26 Javascript
vue插件draggable实现拖拽移动图片顺序
2018/12/01 Javascript
JS设置自定义快捷键并实现图片上下左右移动
2019/10/17 Javascript
对Python中数组的几种使用方法总结
2018/06/28 Python
Tensorflow中的图(tf.Graph)和会话(tf.Session)的实现
2020/04/22 Python
Pandas中DataFrame基本函数整理(小结)
2020/07/20 Python
Pycharm连接gitlab实现过程图解
2020/09/01 Python
CSS3实现内凹圆角的实例代码
2017/05/04 HTML / CSS
阿迪达斯丹麦官网:adidas丹麦
2016/10/01 全球购物
阿拉伯书店:Jamalon
2019/07/24 全球购物
制定岗位职责的原则
2013/11/08 职场文书
咖啡蛋糕店创业计划书
2014/01/28 职场文书
酒店员工检讨书
2014/02/18 职场文书
机械操作工岗位职责
2014/08/08 职场文书
体育教师个人工作总结
2015/02/09 职场文书
代码解析React中setState同步和异步问题
2021/06/03 Javascript
css3 选择器
2022/05/11 HTML / CSS