跳转到主要内容

基于线程的文件系统观察原语接口。

项目描述

概述

MacFSEvents 是一个Python库,它使用回调提供线程安全的目录观察原语。它使用C扩展包装了Mac OS X的 FSEvents API。

要求

  • Mac OS X 10.5+ (Leopard)

  • Python 2.7+

本软件由Malthe Borch编写 <mborch@gmail.com>。使用了Nicolas Dumazet的 pyfsevents 模块作为参考。

https://travis-ci.org/malthe/macfsevents.svg

为什么?

在此写作时,还有其他四个库集成了 FSEvents API

watchdog:

这个库实际上基于 MacFSEvents(本项目)中的代码,但目前不支持Python 3(尽管这应该很快就会发生)。它还包括shell实用工具。

pyobjc-framework-FSEvents

这些使用PyObjC桥接基础设施,而大多数应用程序不需要它。

pyfsevents

不是线程安全的(API未设计为支持它)。

fsevents

John Sutherland对套接字API的过时绑定。

MacFSEvents 库提供了一个干净的API,并且有完整的测试覆盖。

请注意,pyfsevents 对文件描述符观察原语有绑定。这目前尚未由当前库实现。

许可证

在BSD许可证下提供。

使用方法

要观察 path 下的目录结构(递归),我们设置一个观察者线程并安排一个事件流

from fsevents import Observer
observer = Observer()
observer.start()

def callback(FileEvent):
    ...

from fsevents import Stream
stream = Stream(callback, path)
observer.schedule(stream)

流可以观察任意数量的路径;只需将它们作为位置参数传递(或使用 * 操作符)

stream = Stream(callback, *paths)

要在一个独立的线程中启动观察者,请使用 start 方法

observer.start()

要在当前线程中启动观察者,请使用 run 方法(它将阻塞线程,直到从另一个线程停止)

observer.run()

当发生事件时,将调用回调函数。根据流的不同,回调函数将有不同的签名

  1. 标准流(带有回调和路径)将使用参数 callback(path, mask) 调用回调,其中 path 是文件更改的目录,mask 可以使用 FS_FLAG* 和 FS_ITEM* 常量解码 [1]。便捷类 Mask 有一个 __str__ 函数,可以获取标志的文本表示。

  2. 使用 ids = True 关键字参数创建流。在这种情况下,调用为 callback(path, mask, id)。id 可以用于另一个流对象的 since 关键字参数,以接收历史事件(在流变得活跃之前发生的事件)

  3. 如果将 file_events 关键字参数设置为 True,则将 FileEvent 实例传递给回调,并具有 3 个属性:maskcookiename。参数 name 包含事件发生的路径(可能是子目录),而参数 mask 是事件掩码。这模仿了 inotify 的行为。详见下文。

要停止观察,只需取消调度流并停止观察者

observer.unschedule(stream)
observer.stop()

虽然观察者线程将自动在这一点上加入主线程,但明确这一点并没有坏处

observer.join()

我们通常想知道文件级别的事件;要接收文件事件而不是路径事件,请将 file_events=True 传递给流构造函数

def callback(event):
    ...

stream = Stream(callback, path, file_events=True)

事件对象模仿了新 Linux 内核中可用的 inotify 内核扩展的文件事件。它具有以下属性

mask

掩码字段是一个位掩码,表示发生的事件。

cookie

cookie 字段是一个唯一标识符,将两个相关但独立的事件链接在一起。它用于将 IN_MOVED_FROMIN_MOVED_TO 事件链接在一起。

name

名称字段包含事件发生的对象名称。这是绝对文件名。

请注意,实现文件事件的逻辑是在 Python 中实现的;维护并使用观察到的文件系统层次结构的快照来监控文件事件。

变更日志

0.8.4 (2023-05-23)

  • 修复与较新 Python 3 的测试兼容性。

0.8.3 (2023-05-23)

  • 修复棕色袋发布。

0.8.2 (2023-05-22)

  • 修复文件掩码字符串方法缺少返回值 (#43)。

0.8.1 (2018-02-21)

  • 修复棕色袋发布。

0.8 (2018-02-21)

  • 修复可能导致段错误的错误。 [ElonKim]

0.7 (2015-12-18)

  • 删除槽定义。

0.6 (2015-12-06)

  • 在 Python 3 中修复了掩码序列化。

0.5 (2015-12-02)

  • 修复了可能导致段错误的线程处理问题。

  • 事件 ID 可以在流中配置。

  • 增加了将创建标志、延迟和“since 字段”传递给流的支持。

  • 增加了标志转换功能。

  • 支持 UTF-8-MAC(NFD)。

0.4 (2014-10-23)

  • 不要使用“Distribute”。它已被弃用

0.3 (2013-01-21)

  • 增加了与 Python 3 的兼容性。请注意,现在需要 Python 2.7 或更高版本。

  • 在 10.8 上修复了测试套件。此平台报告的事件掩码非平凡,这是与先前版本的不同之处。

0.2.8 (2012-06-09)

错误修复

  • 修复递归快照。 [thomasst]

  • 使用 os.lstat 代替 os.stat 以正确检测符号链接。[thomasst]

0.2.7 (2012-05-29)

  • 增加了对 IN_ATTRIB 的支持。[thomasst]

0.2.6 (2012-03-17)

  • 修复了在新平台上编译的问题。[nsfmc]

0.2.5 (2012-02-01)

  • 递归时忽略不存在的文件。[bobveznat]

0.2.4 (2010-12-06)

  • 防止递归文件夹删除和多个文件夹添加时崩溃。[totolici]

0.2.3 (2010-07-27)

  • 修复了损坏的发布版本。

0.2.2 (2010-07-26)

  • Python 2.4 兼容性。[howitz]

  • 修复了在使用文件事件监控时添加新目录会导致程序崩溃的问题。[andymacp]

0.2.1 (2010-04-27)

  • 修复了导入问题。[andymacp]

0.2 (2010-04-26)

  • 修复了报告现有目录和新建目录的问题。[marcboeker]

  • 增加了文件事件监控支持。

  • 修复了可能导致段错误的引用计数器错误。

0.1 (2009-11-27)

  • 首次公开发布。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源代码分布

MacFSEvents-0.8.4.tar.gz (11.6 kB 查看哈希值)

上传时间