searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Python监控文件变化模块-pyinotify

2023-08-07 07:57:36
94
0

【Linux在2.6.13版本以后才提供了inotify】

·安装&验证

pip3 install pyinotify
python3 -m pyinotify /tmp

当/tmp目录发生事件时,会输出事件信息

·模块API

Notifier是pyinotify模块最重要的类,用来读取通知和处理事件,默认情况下,Notifier处理事件的方式是打印事件。

Notifier类在初始化时接受多个参数,但是只有WatchManager对象是必须传递的参数,WatchManager对象保存了需要监视的文件和目录,以及监视文件和目录的哪些事件,Notifier类根据WatchManager对象中的配置来决定如何处理事件。

事件标志 事件含义
IN_ACCESS 被访问,如被读取
IN_MODIFY 被修改
IN_ATTRIB 元数据被修改
IN_CLOSE_WRITE 一个打开且等待写入被关闭
IN_CLOSE_NOWRITE 一个只读被关闭
IN_OPEN 被打开
IN_MOVED_FROM 被移除监控区域
IN_MOVED_TO 被移入监控区域
IN_CREATE 创建子目录或文件
IN_DELETE 删除子目录或文件
IN_CLOSE 被关闭
IN_MOVE 被移动

各个事件还可以与关联

使用示例:

import pyinotify  # installed need

class MyEventHandler(pyinotify.ProcessEvent):
    def process_IN_MODIFY(self, event):
        alarm_monitor_todo()

    def process_IN_MOVE_SELF(self, event):
        logger.info('!!! alarm.log moved ok')
        reset_task_id()

    def process_IN_DELETE_SELF(self, event):
        logger.info('!!! alarm.log deleted ok')
        reset_task_id()

def alarm_monitor():
    while True:
            try:
                wm = pyinotify.WatchManager()
                wm.add_watch(target_file, pyinotify.IN_MODIFY | pyinotify.IN_MOVE_SELF | pyinotify.IN_DELETE_SELF)
                eh = MyEventHandler()
                notifier = pyinotify.Notifier(wm, eh)

                logger.info(str(notifier) + ' loop')
                notifier.loop()
            except Exception as e:
                logger.warning(f'notifier except: {e}')
0条评论
0 / 1000
曾绍康
2文章数
0粉丝数
曾绍康
2 文章 | 0 粉丝
曾绍康
2文章数
0粉丝数
曾绍康
2 文章 | 0 粉丝
原创

Python监控文件变化模块-pyinotify

2023-08-07 07:57:36
94
0

【Linux在2.6.13版本以后才提供了inotify】

·安装&验证

pip3 install pyinotify
python3 -m pyinotify /tmp

当/tmp目录发生事件时,会输出事件信息

·模块API

Notifier是pyinotify模块最重要的类,用来读取通知和处理事件,默认情况下,Notifier处理事件的方式是打印事件。

Notifier类在初始化时接受多个参数,但是只有WatchManager对象是必须传递的参数,WatchManager对象保存了需要监视的文件和目录,以及监视文件和目录的哪些事件,Notifier类根据WatchManager对象中的配置来决定如何处理事件。

事件标志 事件含义
IN_ACCESS 被访问,如被读取
IN_MODIFY 被修改
IN_ATTRIB 元数据被修改
IN_CLOSE_WRITE 一个打开且等待写入被关闭
IN_CLOSE_NOWRITE 一个只读被关闭
IN_OPEN 被打开
IN_MOVED_FROM 被移除监控区域
IN_MOVED_TO 被移入监控区域
IN_CREATE 创建子目录或文件
IN_DELETE 删除子目录或文件
IN_CLOSE 被关闭
IN_MOVE 被移动

各个事件还可以与关联

使用示例:

import pyinotify  # installed need

class MyEventHandler(pyinotify.ProcessEvent):
    def process_IN_MODIFY(self, event):
        alarm_monitor_todo()

    def process_IN_MOVE_SELF(self, event):
        logger.info('!!! alarm.log moved ok')
        reset_task_id()

    def process_IN_DELETE_SELF(self, event):
        logger.info('!!! alarm.log deleted ok')
        reset_task_id()

def alarm_monitor():
    while True:
            try:
                wm = pyinotify.WatchManager()
                wm.add_watch(target_file, pyinotify.IN_MODIFY | pyinotify.IN_MOVE_SELF | pyinotify.IN_DELETE_SELF)
                eh = MyEventHandler()
                notifier = pyinotify.Notifier(wm, eh)

                logger.info(str(notifier) + ' loop')
                notifier.loop()
            except Exception as e:
                logger.warning(f'notifier except: {e}')
文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0