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中精确输出JSON浮点数的方法
Apr 18 Python
在Django的模板中使用认证数据的方法
Jul 23 Python
对python 匹配字符串开头和结尾的方法详解
Oct 27 Python
Python设计模式之备忘录模式原理与用法详解
Jan 15 Python
简单了解python关系(比较)运算符
Jul 08 Python
Django ORM 聚合查询和分组查询实现详解
Aug 09 Python
Django 在iframe里跳转顶层url的例子
Aug 21 Python
原生python实现knn分类算法
Oct 24 Python
Python3 main函数使用sys.argv传入多个参数的实现
Dec 25 Python
Tensorflow设置显存自适应,显存比例的操作
Feb 03 Python
在python tkinter界面中添加按钮的实例
Mar 04 Python
python递归函数求n的阶乘,优缺点及递归次数设置方式
Apr 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处理大量表单字段的便捷方法
2015/02/07 PHP
用PHP写的一个冒泡排序法的函数简单实例
2016/05/26 PHP
php实现的二叉树遍历算法示例
2017/06/15 PHP
在网页中屏蔽快捷键
2006/09/06 Javascript
javascript显示选择目录对话框的代码
2008/11/10 Javascript
extjs两个tbar问题探讨
2013/08/08 Javascript
搞定immutable.js详细说明
2016/05/02 Javascript
详细分析Javascript中创建对象的四种方式
2016/08/17 Javascript
angularjs的select使用及默认选中设置
2017/04/08 Javascript
JavaScript学习笔记之惰性函数示例详解
2017/08/27 Javascript
基于vue监听滚动事件实现锚点链接平滑滚动的方法
2018/01/17 Javascript
layui-laydate时间日历控件使用方法详解
2018/11/15 Javascript
详解一个基于react+webpack的多页面应用配置
2019/01/21 Javascript
javascript数组常见操作方法实例总结【连接、添加、删除、去重、排序等】
2019/06/13 Javascript
jquery.validate自定义验证用法实例分析【成功提示与择要提示】
2020/06/06 jQuery
零基础写python爬虫之抓取百度贴吧并存储到本地txt文件改进版
2014/11/06 Python
使用Python编写简单的端口扫描器的实例分享
2015/12/18 Python
Python入门之后再看点什么好?
2018/03/05 Python
解决pycharm 误删掉项目文件的处理方法
2018/10/22 Python
python爬虫超时的处理的实例
2018/12/19 Python
python 处理telnet返回的More,以及get想要的那个参数方法
2019/02/14 Python
通过python3实现投票功能代码实例
2019/09/26 Python
详解Django配置优化方法
2019/11/18 Python
图库照片、免版税图片、矢量艺术、视频片段:Depositphotos
2019/08/02 全球购物
某IT外企面试题-二分法求方程!看看大家的C++功底
2015/07/04 面试题
《临死前的严监生》教学反思
2014/02/13 职场文书
C++程序员求职信范文
2014/04/14 职场文书
力学专业求职信
2014/07/23 职场文书
超市创意活动方案
2014/08/15 职场文书
2014年卫生保健工作总结
2014/12/08 职场文书
《观察物体》教学反思
2016/02/17 职场文书
如何让2019年上半年的工作总结更出色!
2019/07/01 职场文书
python用字节处理文件实例讲解
2021/04/13 Python
vue引入Excel表格插件的方法
2021/04/28 Vue.js
React实现动效弹窗组件
2021/06/21 Javascript
「玫瑰之王的葬礼」舞台剧主视觉图公开
2022/03/21 日漫