inotify包装器为指定的文件系统事件提供带超时的轮询

pollinotif的Python项目详细描述


1摘要

pollinotify是一个简单的扩展模块,它封装了linuxinotify服务,提供了一种监视的方法 发生在指定文件或指定目录中的特定类型的文件事件。它的主要卖点是 那:

1 It is polled, so instead of having to set up a background thread, or attach a separate event-watching package, the programmer calls it with an optional timeout, so it reports event that have already occurred, or waits for at most the specified time, or until an event occurs;

2 The polling can wait for specific kinds of event.

由于模块依赖于inotify服务,it仅在Linux上可用。

2模块结构

2.1常数

一些常量表示常见的Linux文件系统事件代码,具有友好的名称:

Constant NameLinux NameInterpretation
AccessIN_ACCESSObject accessed
ModifyIN_MODIFYObject modified
AttributesIN_ATTRIBObject attributes modified
OpenIN_OPENFile opened
CloseWriteIN_CLOSE_WRITEFile closed after contents changed
CloseOtherIN_CLOSE_NOWRITEFile closed without contents changed
CloseIN_CLOSEFile closed
MoveFromIN_MOVED_FROMObject moved from location
MoveToIN_MOVED_TOObject moved to location
MoveIN_MOVEObject moved
MoveSelfIN_MOVE_SELFObject being monitored is deleted
CreateIN_CREATEObject created
DeleteIN_DELETEObject deleted
DeleteSelfIN_DELETE_SELFObject being monitored is deleted
IgnoredIN_IGNOREDIgnored
DirEventIN_ISDIRThe monitored object to which the event occurred is a directory
AllEventsIN_ALL_EVENTSAny event

2.2实用功能

maskasstring(掩码)
接受一个等于一个或多个事件常量{em1}$或-ed的值 并返回一个可读的字符串表示形式,由一个分隔的空格组成 匹配事件的名称列表

2.3fileevent

fileevent表示inotify服务检测到的事件。事件信息已保存 在属性中:

self.path
发生事件的文件或目录的路径
self.mask
表示所遭受事件的值,表示为事件代码的-ed集合,一个用于 检测到的每种事件
self.decode()
返回事件对应的事件类型的名称列表
self.matches(掩码)
返回true如果参数是对象所表示的事件类型之一的代码,false 否则

此外,如果efileevent对象,则

str(e) = maskAsString(e.mask)
len(e) = len(e.decode())
x in e = e.matches(x)

2.4watcher

模块的基本类。它连接到系统inotify服务并使用它 轮询一个或多个指定文件系统路径中的事件。轮询基于超时, 也可以是非阻塞的。

它有以下方法:

\u初始化
无参数构造函数
addpath(path,mode=allevents)
path添加到要轮询事件的目录列表中;轮询 只收集与-ed事件代码掩码匹配的事件 在可选参数mode中指定(默认为所有事件)
poll(超时=0)
轮询指定路径上发生的事件,返回 true如果有,则false否则;超时 在timeout毫秒之后,在这种情况下返回false
事件(匹配=所有事件)
返回fileevent对象的列表,一个用于 上次轮询会话期间检测到的每个事件 与指定的可选-ed事件代码掩码匹配的
npaths()
返回当前在监视程序中注册的路径数
nevents()
返回上次轮询会话中检测到的事件数

如果wwatcher实例,则

len(w)  = w.nEvents()
iter(w) = iter(w.events())

3示例

一个简单的例子,它以1秒的超时轮询并列出这些事件 与中的文件创建或修改(包括touch)相对应 用户的主目录。

import pollinotify

n=pollinotify.Watcher()
n.addPath('~')
while True:
    got=n.poll(timeout=1000)
    if got:
        events=n.events(match=notify.CloseWrite)
        print('Got{} events'.format(len(events))
        for event in events:
            print('{} : {} : {}'.format(event.path,event.mask,str(event)))

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
安卓在Java代码中添加平方根和退格按钮   java H2数据库在创建序列时引发意外的JdbcSQLException   Java解析方法调用其他类   java如何在Android中测量循环中代码的累积执行时间?   javascript如何构造此数组,将类别和产品分开   java正确的时间格式   java可移植性。查找和迭代器。查找而不是引发异常,获取null   Android中Telugu字符串的java正则表达式?   java需要帮助计算arrayList中的字符数   正则表达式Java正则表达式替换双引号内的双引号   安卓 java。lang.unsatifiedLinkError:未找到本机方法:org。pjsip。pjsua。pjsuaJNI。新的伙伴配置:()J   关于Java中线程和回调的多线程问题   java mod_重写规则(如果出现其他问题)   java类导入到jsp并创建对象问题   java正在从mongoDB获取损坏的信息。   java第二个JFrame首先关闭   java如何使JButton接受来自JTextField的输入?   java如何为jacksondataypehal注释记录   Java元编程难题:获取所有本身由给定注释a注释的注释