python 监控文件变化 - python watchdog模块使用方法
很多时候我们希望根据一个文件目录下文件和文件夹的变化情况,做出相应的响应。当然我们无需每时每刻都去扫描该文件目录,python watchdog 模块提供了这方面的功能。Watchdog用于监控一个文件目录下的文件和文件夹的变动,包括文件和文件夹的增删改,移动等。
watchdog是github上的一个开源项目,源码见这里,采用观察者模式。watchdog 提供了对于不同操作系统的支持,在源码路径中master/src/watchdog/observers/__init__.py
的注释说明了对于如下操作系统的支持:
============== ================================ ==============================
Class Platforms Note
============== ================================ ==============================
|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| MS Windows Windows API-based observer
|Polling| Any fallback implementation
============== ================================ ==============================
可以看到对于包括window,linux以及MAC os都提供了支持,可以放心使用。
如下是对于该模块的使用示例:
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 {} to {}".format(event.src_path,event.dest_path))else:print("file moved from {} to {}".format(event.src_path,event.dest_path))self.task(filName = event.dest_path)def on_created(self, event):if event.is_directory:print("directory created:{}".format(event.src_path))else:print("file created:{}".format(event.src_path))def on_deleted(self, event):if event.is_directory:print("directory deleted:{}".format(event.src_path))else:print("file deleted:{}".format(event.src_path))def on_modified(self, event):if event.is_directory:print("directory modified:{}".format(event.src_path))else:print("file modified:{}".format(event.src_path))def task(self,filName):print(filename)#具体任务if __name__ == "__main__":observer = Observer()event_handler = FileEventHandler()filePath = '/data/pcap'observer.schedule(event_handler,filePath,True)observer.start()time.sleep(100)observer.stop()observer.join()
可以看到使用起来也是非常的简单:
1,重新定义一个类继承FileSystemEventHandler类,重载四个事件函数即可。这四个函数对应的是文件的增删改,移动等事件。
2,以on_moved函数为例,在该函数中处理对于文件移动事件的响应,我调用的是task函数,该函数可以根据实际的需求进行修改。
3,将新类的对象,监控的文件目录作为参数传入observer.schedule函数,filePath即监控的文件目录,event_handler对象对于文件事件做出处理。
4,observer.start()启动之后,一直是监听状态,除非显示的退出。我的示例程序中在监听100s之后退出,可以根据自身情况进行修改。
使用过程中的注意事项:
1,文件创建的动作其实会触发多种事件,包括FileCreatedEvent以及FileModifiedEvent时间,触发on_created以及on_modified函数,这是需要注意的。原因在于f = open(… , ‘w’) 这样文件创建动作会触发FileCreatedEvent事件,执行on_created函数; 在往文件些数据的时候例如f.flush() 和f.close()操作 会触发FileModifiedEvent事件,执行on_modified函数。
2,前面也提到不同的操作系统平台基于不同的observer,在文件处理方面也可能会存在差异,因此对于不同的平台,最好详细测试一下文件的创建,写入,关闭的个操作会触发什么事件。
3,我的业务场景是监控文件夹下面pcap报文的情况,并解码报文。我在Linux平台上的策略是在写数据的时候,我的文件名是xxx,在文件写完之后,我将文件名修改成为xxx.pcap。这个时候文件名的修改会触发文件移动事件,那么这个时候我在on_moved函数中执行对于pcap报文的解析就可以了。对于文件创建写入引发的修改和创建事件忽略即可。
4,在实际处理过程中watchdog的对于事件的响应还是非常的及时。
上述就是watchdog的简单的使用经验。
本文为CSDN村中少年原创文章,转载记得加上原创出处,博主链接这里。
python 监控文件变化 - python watchdog模块使用方法相关推荐
- Python监控文件变化:watchdog
Python监控文件变化有两种库:pyinotify和watchdog.pyinotify依赖于Linux平台的inotify,后者则对不同平台的的事件都进行了封装.也就是说,watchdog跨平台. ...
- 监控文件变化 (Python—看门狗)
目录结构 安装watchdog 包 pip install watchdog watch_fold.py import sys import time from logger import loggi ...
- 神器推荐!一个能监控文件变化的Python神器—看门狗
假设现在有一个应用场景,需要对文件系统进行监控,发生变化时产生日志,对新增的文件做一些相应的操作. 比如说应用到我们之前的音乐高潮提取器:若当前文件夹下增加了一个音乐文件,监控器就调用音乐高潮提取器, ...
- python打开文件不存在-Python判断文件是否存在的三种方法
原标题:Python判断文件是否存在的三种方法 通常在读写文件之前,需要判断文件或目录是否存在,不然某些处理方法可能会使程序出错.所以最好在做任何操作之前,先判断文件是否存在. 这里将介绍三种判断文件 ...
- 服务器监控文件变化,如何使用nodejs监控文件变化并使用sftp上传到服务器
如何使用nodejs监控文件变化并使用sftp上传到服务器 发布时间:2021-07-01 12:06:56 来源:亿速云 阅读:99 作者:小新 这篇文章主要为大家展示了"如何使用node ...
- node 自动上传文件到服务器,利用nodejs监控文件变化并使用sftp上传到服务器
最近在用react+express做一个自己的工具型网站(其实就是夺宝岛抢拍器) 然后因为经常要改动,而且又要放到服务器上进行测试.总是要webpack,然后手动把文件上传上去,不胜其烦,索性搜索了下 ...
- delphi 监控文件变化_监控Linux文件变化,防止系统被黑
运维服务器比较头疼的一个问题是系统被黑,沦为肉鸡或者矿机.除了加强安全基线配置,加强网络和端口加固,系统和应用bug修复,上IDS/IPS(入侵检测/防御系统)之外,另一个方面就是系统监控,一个完善准 ...
- FileSystemWatcher 监控文件变化
本文测试了FileSystemWatcher 类监控文件变化. using System; using System.Security.Permissions; using System.IO;nam ...
- viper监控文件变化出现两次事件
问题描述 监控配置文件变化,如果内容发生了修改,需要及时加载. 使用viper监控文件变化发现了, 对文件修改一次,会出发两次事件. 示例代码 viper.OnConfigChange(func(e ...
- rust 使用hotwatch 监控文件变化
hotwatch是一个可以监控文件变化的crate,使用起来非常方便.参考:GitHub - francesca64/hotwatch: A Rust library for conveniently ...
最新文章
- Windows Server 2003 R2 修复Windows Server 2003
- which和whereis
- WinPcap笔记(5):不用回调方法捕获数据包
- Solaris 10主动安顿DVD运用步骤
- android深度探索 HAL及驱动开发 第八章
- 水滴石穿C语言之可变参数问题
- JavaScriptCore全面解析
- RAC环境下配置TAF (Final)
- 一个好的函数(gcd)求最小公约数
- linux内核奇遇记之md源代码解读之三
- 《SQL Server2008》第二章 创建和管理数据库
- PHP开发工资条短信通知
- Web聊天室历史记录解决方案(轻喷。。)
- 抖音网上如何赚钱变现,有哪些具体的方法
- 课程设计:波形发生器
- 服务器外链图片不显示,nginx服务器设置图片防盗链,禁止图片外链
- 一个简单有趣的爬虫-----爬取百度翻译功能
- 高性能RTMP推流服务器软件EasyDSS如何支持推流摄像机推流直播进行云端录像存储及计划保存
- 高等代数 具有度量的线性空间(第10章)2 实内积空间
- 数据分析行业的发展前景怎么样? 未来关于十年数据分析行业的5种预测
热门文章
- 安卓百度地图,隐藏左下角Logo
- 服务器开机日志文件,大芒果启动WOW服务器 提示日志文件找不到怎么办
- div网页布局(做一个简单网页界面为例)
- CorelDRAW打造金属质感3D立体按钮教程
- 寻找反素数python
- 计算机台式电源3c号,电源3C认证流程详情介绍
- ae合成设置快捷键_AE中常用的快捷键,你了解多少?(五)
- 图片裁切批处理_图片批量处理 如何批量将图片裁剪成一样的大小?按照一定的比例快速裁剪多张照片...
- 浙江大学14届计算机学院孙晓宇,郑州外国语学校2011年保送生录取名单
- 近观香港,远看上海,反思深圳