很多时候我们希望根据一个文件目录下文件和文件夹的变化情况,做出相应的响应。当然我们无需每时每刻都去扫描该文件目录,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模块使用方法相关推荐

  1. Python监控文件变化:watchdog

    Python监控文件变化有两种库:pyinotify和watchdog.pyinotify依赖于Linux平台的inotify,后者则对不同平台的的事件都进行了封装.也就是说,watchdog跨平台. ...

  2. 监控文件变化 (Python—看门狗)

    目录结构 安装watchdog 包 pip install watchdog watch_fold.py import sys import time from logger import loggi ...

  3. 神器推荐!一个能监控文件变化的Python神器—看门狗

    假设现在有一个应用场景,需要对文件系统进行监控,发生变化时产生日志,对新增的文件做一些相应的操作. 比如说应用到我们之前的音乐高潮提取器:若当前文件夹下增加了一个音乐文件,监控器就调用音乐高潮提取器, ...

  4. python打开文件不存在-Python判断文件是否存在的三种方法

    原标题:Python判断文件是否存在的三种方法 通常在读写文件之前,需要判断文件或目录是否存在,不然某些处理方法可能会使程序出错.所以最好在做任何操作之前,先判断文件是否存在. 这里将介绍三种判断文件 ...

  5. 服务器监控文件变化,如何使用nodejs监控文件变化并使用sftp上传到服务器

    如何使用nodejs监控文件变化并使用sftp上传到服务器 发布时间:2021-07-01 12:06:56 来源:亿速云 阅读:99 作者:小新 这篇文章主要为大家展示了"如何使用node ...

  6. node 自动上传文件到服务器,利用nodejs监控文件变化并使用sftp上传到服务器

    最近在用react+express做一个自己的工具型网站(其实就是夺宝岛抢拍器) 然后因为经常要改动,而且又要放到服务器上进行测试.总是要webpack,然后手动把文件上传上去,不胜其烦,索性搜索了下 ...

  7. delphi 监控文件变化_监控Linux文件变化,防止系统被黑

    运维服务器比较头疼的一个问题是系统被黑,沦为肉鸡或者矿机.除了加强安全基线配置,加强网络和端口加固,系统和应用bug修复,上IDS/IPS(入侵检测/防御系统)之外,另一个方面就是系统监控,一个完善准 ...

  8. FileSystemWatcher 监控文件变化

    本文测试了FileSystemWatcher 类监控文件变化. using System; using System.Security.Permissions; using System.IO;nam ...

  9. viper监控文件变化出现两次事件

    问题描述 监控配置文件变化,如果内容发生了修改,需要及时加载. 使用viper监控文件变化发现了, 对文件修改一次,会出发两次事件. 示例代码 viper.OnConfigChange(func(e ...

  10. rust 使用hotwatch 监控文件变化

    hotwatch是一个可以监控文件变化的crate,使用起来非常方便.参考:GitHub - francesca64/hotwatch: A Rust library for conveniently ...

最新文章

  1. Windows Server 2003 R2 修复Windows Server 2003
  2. which和whereis
  3. WinPcap笔记(5):不用回调方法捕获数据包
  4. Solaris 10主动安顿DVD运用步骤
  5. android深度探索 HAL及驱动开发 第八章
  6. 水滴石穿C语言之可变参数问题
  7. JavaScriptCore全面解析
  8. RAC环境下配置TAF (Final)
  9. 一个好的函数(gcd)求最小公约数
  10. linux内核奇遇记之md源代码解读之三
  11. 《SQL Server2008》第二章 创建和管理数据库
  12. PHP开发工资条短信通知
  13. Web聊天室历史记录解决方案(轻喷。。)
  14. 抖音网上如何赚钱变现,有哪些具体的方法
  15. 课程设计:波形发生器
  16. 服务器外链图片不显示,nginx服务器设置图片防盗链,禁止图片外链
  17. 一个简单有趣的爬虫-----爬取百度翻译功能
  18. 高性能RTMP推流服务器软件EasyDSS如何支持推流摄像机推流直播进行云端录像存储及计划保存
  19. 高等代数 具有度量的线性空间(第10章)2 实内积空间
  20. 数据分析行业的发展前景怎么样? 未来关于十年数据分析行业的5种预测

热门文章

  1. 安卓百度地图,隐藏左下角Logo
  2. 服务器开机日志文件,大芒果启动WOW服务器 提示日志文件找不到怎么办
  3. div网页布局(做一个简单网页界面为例)
  4. CorelDRAW打造金属质感3D立体按钮教程
  5. 寻找反素数python
  6. 计算机台式电源3c号,电源3C认证流程详情介绍
  7. ae合成设置快捷键_AE中常用的快捷键,你了解多少?(五)
  8. 图片裁切批处理_图片批量处理 如何批量将图片裁剪成一样的大小?按照一定的比例快速裁剪多张照片...
  9. 浙江大学14届计算机学院孙晓宇,郑州外国语学校2011年保送生录取名单
  10. 近观香港,远看上海,反思深圳