Python pyinotify介绍

在上文 <浅析 Linux inotify机制> https://my.oschina.net/u/2291453/blog/833919 咱们已经探讨过Linux下的inotify机制, 也给出了简单实战例子, 但是c语言版本的, 无独有偶, python也封装这机制的库: pyinotify,那我们在简单实验下吧!

安装

依赖关系: 

  • Linux ≥ 2.6.13
  • Python ≥ 2.4 (including Python 3.x)

1.通过pip安装

pip install pyinotify

2.通过 https://pypi.python.org/pypi/pyinotify 下载源码包, 源码安装

用法

pyinotify 支持的系统事件, 和 C语言版本的inotify相一致, 同样也是:

事件掩码文件系统事件
IN_ACCESS文件被访问
IN_MODIFY文件内容被修改
IN_ATTRIB文件属性被修改( 如 chmod )
IN_CLOSE_WRITE可写文件被关闭
IN_CLOSE_NOWRITE不可写文件被关闭
IN_MOVED_FROM文件被移走( 如 mv )
IN_MOVED_TO文件被移来( 如 mv, cp )
IN_OPEN文件被打开
IN_CREATE文件被创建
IN_DELETE文件被删除
IN_DELETE_SELF自删除( 一个可执行文件在执行时删除自己)
IN_MOVE_SELF自移动( 一个可执行文件在执行时移动自己 )
IN_UNMOUNT宿主文件系统被卸载
IN_CLOSE文件被关闭等同于(IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)
IN_MOVE文件被移动 等同于 (IN_MOVED_FROM | IN_MOVED_TO)

 

#!/usr/bin/python27
import os
from pyinotify import WatchManager, Notifier, ProcessEvent, IN_DELETE, IN_CREATE, IN_MODIFY
class EventHandler(ProcessEvent):
    def process_IN_CREATE(self, event):
        print 'Create file: %s' % os.path.join(event.path, event.name)

    def process_IN_DELETE(self, event):
        print 'Delete file: %s' % os.path.join(event.path, event.name)

    def process_IN_MODIFY(self, event):
        print 'Modify file %s' % os.path.join(event.path, event.name)

def fs_monitor(path='.'):
    # 初始化watch管理器, 用于管理事件
    wm = WatchManager()
    mask = IN_DELETE | IN_CREATE | IN_MODIFY
    # process_event 实例和 watch管理器关联, 返回通知查看对象
    notifier = Notifier(wm, EventHandler())
    # 将目标路径, 掩码添加到watch管理器
    wm.add_watch(path, mask, rec=True)
    print 'Now starting monitor: %s' % path
    while 1:
        try:
            # 同步事件
            notifier.process_events()
            # 检查是否有可读事件, 否则一直堵塞
            if notifier.check_events():
                # 读取事件
                notifier.read_events()
        except KeyboardInterrupt:
            notifier.stop
            break
fs_monitor()

执行 

py27  fs_monitor.py

输出:

[root@iZ23pynfq19Z ~]# py27  fs_monitor.py
Now starting monitor: .
Modify file ./.fs_monitor.py.swp

那么简单的一个pyinotify实例就已经写出来了, 我们可以利用这些来帮助我们干一些对实时性要求比较高的事情,例如: 类似 tail -f  监听文件~ 

欢迎各位大神指点, 转载请注明: https://my.oschina.net/u/2291453/blog/834335

转载于:https://my.oschina.net/LinBigR/blog/834335

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值