Pyinotify实现对文件的实时监控

1. Pyinotify介绍

  • 描述:用来监测文件系统的变化,依赖于Linux内核的inotify功能,inotify是一个事件驱动的通知器,其通知接口从内核空间到用户空间通过三个系统调用。Pyinotify结合这些系统调用,提供一个顶级的抽象和一个通用的方式来处理这些功能
  • 安装:pip install pyinotify
  • 注意:windows上不可以使用,只可以基于Linux使用
  • 包含子模块:Notifier,用来读取通知和处理事件。默认情况下,Notifier处理事件的方式是打印事件。
    Notifier类在初始化时接受多个参数,但是只有WatchManager对象是必须传递的参数,WatchManager对象保存了需要监视的文件和目录,以及监视文件和目录的哪些事件,Notifier类根据WatchManager对象中的配置来决定如何处理事件

2. Notifier的内置事件

事件名称 事件描述
IN_ACCESS 文件访问
IN_MODIFY 文件被写入
IN_ATTRIB 文件属性被修改,如chmodchowntouch
IN_CLOSE_WRITE 可写文件被close
IN_CLOSE_NOWRITE 不可写文件被close
IN_OPEN 文件被open
IN_MOVED_FROM 文件被移走,如mv
IN_MOVED_TO 文件被移来,如mvcp (可以用来检测应用类的文件上传)
IN_CREATE 创建新文件
IN_DELETE 文件被删除,如rm
IN_DELETE_SELF 自删除,即一个可执行文件在执行时删除自己
IN_MOVE_SELF 自移动,即一个可执行文件在执行时移动自己
IN_UNMOUNT 宿主文件系统被umount
IN_CLOSE 文件被关闭,等同于IN_CLOSE_WRITE
IN_MOVE 文件被移动,等同于IN_MOVED_FROM

3. 使用实例

  • 描述:下面的代码可以监控服务器上/dsme/soft/paddleOCR.py的文件是否被打开
# coding=utf-8
import pyinotify


# 必须为process_事件名称,event表示事件对象,event.pathname 表示触发事件的文件路径
class IN_DELETE_EventHandler(pyinotify.ProcessEvent):
    def process_IN_OPEN(self,event):
        print 'OPEN',event.pathname
    def process_IN_CLOSE_NOWRITE(self,event):
        print 'CLOSE_NOWRITE',event.pathname

# 监控多个事件
multi_event = pyinotify.IN_OPEN | pyinotify.IN_CLOSE_NOWRITE | pyinotify.IN_ACCESS
# 创建WatchManager对象
wm = pyinotify.WatchManager()
# 实例化我们定制化后的事件处理类
handler = IN_DELETE_EventHandler()
# 交给Notifier进行处理
notifier = pyinotify.Notifier(wm,handler)
# 添加监控的目录,及事件
wm.add_watch('/dsme/soft/paddleOCR.py',multi_event)
notifier.loop()
# wm.watch_transient_file('/tmp', pyinotify.IN_DELETE,IN_DELETE_EventHandler) # 添加要监控的目录以及监控的事件
posted @   alexmelt  阅读(206)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示