python中文件变化监控-watchdog

起步

在python中文件监控主要有两个库,一个是pyinotify,一个是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

给出示例代码如下:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Created by victor# 本模块的功能:<检测文件夹变化># 导入watchdog对应模块
from watchdog.observers import Observer
from watchdog.events import *
# 导入时间模块
import timeclass 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 = Observer()event_handler = FileEventHandler()# 设置监听目录dis_dir = "e:/"observer.schedule(event_handler,dis_dir,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的源码,写的易懂而且架构很好用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/455435.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python决策树分类鸢尾花_基于决策树—鸢尾花分类

决策树算法广泛应用于&#xff1a;语音识别、医疗诊断、客户关系管理、模式识别、专家系统等&#xff0c;在实际工作中&#xff0c;必须根据数据类型的特点及数据集的大小&#xff0c;选择合适的算法。本文选择经典案例——《鸢尾花分类》一、决策树定义决策树算法是一种基于实…

希捷宣布出货双碟装1TB硬盘 单碟500GB上市

希捷今天宣布&#xff0c;单碟容量高达500GB的Barracuda 7200.12 1TB硬盘已经出货。 现有的1TB硬盘产品一般都是三碟装(此前也有四碟装)&#xff0c;包括希捷自家的ST31000340AS&#xff0c;但希捷一进率先将其升级为双碟装&#xff0c;存储密度也达到了329Gb每平方英寸。这样一…

P1334 瑞瑞的木板

题目描述 瑞瑞想要亲自修复在他的一个小牧场周围的围栏。他测量栅栏并发现他需要N&#xff08;1≤N≤20,000&#xff09;根木板&#xff0c;每根的长度为整数Li&#xff08;1≤Li≤50,000&#xff09;。于是&#xff0c;他神奇地买了一根足够长的木板&#xff0c;长度为所需的N…

FFMpeg的output_example.c例子分析

该例子讲了如何输出一个libavformat库所支持格式的媒体文件。 &#xff08;1&#xff09;av_register_all()&#xff0c;初始化libavcodec库&#xff0c;并注册所有的编解码器和格式。 &#xff08;2&#xff09;guess_format()&#xff0c;根据文件名来获取输出文件格式&#…

大量数据+同步+多线程_Vulkan 多线程渲染

1. Overview of Vulkan1.1 计算机图形软件图形软件有两个大类&#xff1a;专用软件包&#xff08;special-purpose packages&#xff09;和通用编程软件包&#xff08;general programming packages&#xff09;。专用软件包通常提供一种UI设计语言&#xff0c;让用户直接生成想…

飞康任命Gartner前分析师担任亚洲区市场总监

在虚拟化、数据保护和数据迁移领域具备15年创新经验的美国飞康软件公司&#xff08;FalconStor Software, Inc.&#xff0c;NASDAQ&#xff1a;FALC&#xff09;近日宣布任命张瑾&#xff08;Jimmie Chang&#xff09;先生担任该公司亚洲区市场部门负责人。 飞康公司近日面向全…

12_登陆案例

13131转载于:https://www.cnblogs.com/ZHONGZHENHUA/p/7044846.html

如何基于FFMPEG和SDL写一个少于1000行代码的视频播放器

http://blog.csdn.net/eplaylity/archive/2008/12/05/3454431.aspx http://www.cnblogs.com/konyel/tag/SDLGuide%E4%B8%AD%E6%96%87%E8%AF%91%E7%89%88/ ffmpeg文档http://blog.sina.com.cn/s/blog_46dc65a90100a91b.html http://dranger.com/ffmpeg/ffmpeg.html VLC核心功能部…

Flask 概述

什么是Web Framework&#xff1f; Web Application Framework&#xff08;Web应用程序框架&#xff09;或简单的Web Framework&#xff08;Web框架&#xff09;表示一个库和模块的集合&#xff0c;使Web应用程序开发人员能够编写应用程序&#xff0c;而不必担心协议&#xff0…

(五)Maven中的聚合和继承

一、为什么要聚合&#xff1f; 定义&#xff1a;我们在开发过程中&#xff0c;创建了2个以上的模块&#xff0c;每个模块都是一个独立的maven project&#xff0c;在开始的时候我们可以独立的编译和测试运行每个模块&#xff0c;但是随着项目的不断变大和复杂化&#xff0c;我们…

python堆栈反向输出列表_python - IPython:将Python脚本的输出重定向到文件(如bash) - 堆栈内存溢出...

IPython有自己的上下文管理器来捕获stdout / err &#xff0c;但它没有重定向到文件&#xff0c;它重定向到一个对象&#xff1a;from IPython.utils import iowith io.capture_output() as captured:%run my_script.pyprint captured.stdout # prints stdout from your script…

关于datagrid

基本在公司使用的datagrid不需要自己写前台代码&#xff0c;只需要自己给grid明确id&#xff0c;url以及列属性即可。 后台需要返回一个数据类型&#xff1a;{recordsFiltered2, data[], drawnull, recordsTotal2}&#xff0c;通常返回这个数据类型的话&#xff0c;只需要调用d…

M-JPEG、MPEG4、H.264都有何区别 依维安防论坛

压缩方式是网络视频服务器和网络摄像机的核心技术&#xff0c;压缩方式很大程度上决定着图像的质量、压缩比、传输效率、传输速度等性能&#xff0c;它是评价网络视频服务器和网络摄像机性能优劣的重要一环。 随着多媒体技术的发展&#xff0c;相继推出了许多压缩编码标准&…

Django/Flask/Tornado三大web框架性能分析

写在前面&#xff1a;本文的数据涉及到之前遇到过的问题&#xff0c;大概一次 http 请求到收到响应需要多少时间。这个问题在实际工作中与框架有比较大的关系&#xff0c;因此特别就框架的性能做了一次分析。这里使用之前的一个报告数据&#xff1a; Pythons Web Framework Ben…

python urllib模块学习笔记

这个模块是最基本最常用的&#xff0c;以前看过&#xff0c;总结一下 #coding : utf-8import urlliburl http://cnblogs.com#代理服务器proxies {http:http://127.0.0.1:8087}#使用代理服务器打开r urllib.urlopen(url,proxies proxies)print r.info()print r.getcode()pri…

hibernate基础工具findBySQL学习

public List<Map<String,Object>> findBySQL(String sql,Map<String,Object> param,int start,int max) {log.debug("finding List by hql");try {       //最后返回map map的key可为别名和数据库字段SQLQuery querysessionFactory.getCurr…

python处理ini文件_python对ini配置文件处理

>>> cf.read("test.ini") #读取配置文件[test.ini]>>> cf.sections() #片段名[base, callback]>>> cf.options("callback") #配置…

Python实现自动推本地github博客到远程仓库

Python实现自动推本地github博客到远程仓库 以前的简单版本 通过python中的os模块操作系统命令 详情可参考:Python实现一行代码推本地git到远程仓库 升级版本 本次加入了监听文件修改功能 这样脚本只需在后台运行,即可检测到对应的文件夹中的内容是否变化 如果变化,则调用…

H.264/MPEG-4 AVC

维基百科&#xff0c;自由的百科全书跳转到&#xff1a; 导航, 搜索 跳过字词转换说明 汉漢▼▲为了阅读方便&#xff0c;本文使用全文手工轉換。转换内容&#xff1a;本文采用电脑和信息技术组全文转换 [查看] • [编辑] • [强制刷新] 以下為本條目單獨的全文轉換&#xff0c…

JavaScript 专题之函数柯里化

JavaScript 专题系列第十三篇&#xff0c;讲解函数柯里化以及如何实现一个 curry 函数 定义 维基百科中对柯里化 (Currying) 的定义为&#xff1a; In mathematics and computer science, currying is the technique of translating the evaluation of a function that takes m…