【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}')