跳转到主要内容

文件系统事件监控

项目描述

Build Status CirrusCI Status

Python API 和 shell 实用工具,用于监控文件系统事件。

适用于 3.9+。

示例 API 使用

一个简单的程序,使用 watchdog 监控命令行参数指定的目录,并记录生成的事件

import time

from watchdog.events import FileSystemEvent, FileSystemEventHandler
from watchdog.observers import Observer


class MyEventHandler(FileSystemEventHandler):
    def on_any_event(self, event: FileSystemEvent) -> None:
        print(event)


event_handler = MyEventHandler()
observer = Observer()
observer.schedule(event_handler, ".", recursive=True)
observer.start()
try:
    while True:
        time.sleep(1)
finally:
    observer.stop()
    observer.join()

shell 实用工具

Watchdog 附带一个名为 watchmedo可选 实用脚本。请在 shell 提示符中键入 watchmedo --help 以获取有关此工具的更多信息。

以下是记录当前目录递归事件的方法,这些事件仅与 *.py*.txt 文件相关,同时忽略所有目录事件

watchmedo log \
    --patterns='*.py;*.txt' \
    --ignore-directories \
    --recursive \
    --verbose \
    .

您可以使用 shell-command 子命令在事件发生时执行 shell 命令

watchmedo shell-command \
    --patterns='*.py;*.txt' \
    --recursive \
    --command='echo "${watch_src_path}"' \
    .

请通过键入以下内容来查看这些命令的帮助信息

watchmedo [command] --help

关于 watchmedo 技巧

watchmedo 可以读取 tricks.yaml 文件,并在响应文件系统事件时执行其中的技巧。技巧实际上是子类 watchdog.tricks.Trick 的事件处理器,由插件作者编写。技巧类增加了一些常规事件处理器不需要的附加功能。

一个示例 tricks.yaml 文件

tricks:
- watchdog.tricks.LoggerTrick:
    patterns: ["*.py", "*.js"]
- watchmedo_webtricks.GoogleClosureTrick:
    patterns: ['*.js']
    hash_names: true
    mappings_format: json                  # json|yaml|python
    mappings_module: app/javascript_mappings
    suffix: .min.js
    compilation_level: advanced            # simple|advanced
    source_directory: app/static/js/
    destination_directory: app/public/js/
    files:
      index-page:
      - app/static/js/vendor/jquery*.js
      - app/static/js/base.js
      - app/static/js/index-page.js
      about-page:
      - app/static/js/vendor/jquery*.js
      - app/static/js/base.js
      - app/static/js/about-page/**/*.js

包含 tricks.yaml 文件的目录将被监控。每个技巧类都使用 tricks.yaml 文件中相应的键作为参数进行初始化,并将事件传递给该类的实例。

安装

使用 pip 从 PyPI 安装

$ python -m pip install -U watchdog

# or to install the watchmedo utility:
$ python -m pip install -U "watchdog[watchmedo]"

从源代码安装

$ python -m pip install -e .

# or to install the watchmedo utility:
$ python -m pip install -e '.[watchmedo]'

文档

您可以在网上浏览最新版本的文档

贡献

在 GitHub 上分叉 存储库 并发送拉取请求,或在 问题跟踪器 中提交问题票。对于一般帮助和问题,请在 Stack Overflow 上使用标签 python-watchdog

创建并激活您的虚拟环境,然后

python -m pip install tox
python -m tox [-q] [-e ENV]

如果您正在进行重大更改,请将条目添加到 更改日志 的“未发布”部分。

支持的平台

  • Linux 2.6 (inotify)

  • macOS (FSEvents, kqueue)

  • FreeBSD/BSD (kqueue)

  • Windows (ReadDirectoryChangesW 与 I/O 完成端口;ReadDirectoryChangesW 工作线程)

  • 与操作系统无关(轮询磁盘以获取目录快照并定期比较;速度慢且不推荐使用)

注意:当使用kqueue与watchdog时,您需要将系统上运行程序的文件描述符数量增加到您将要监视的文件数量以上。最简单的方法是编辑您的~/.profile文件,并添加类似以下的一行:

ulimit -n 1024

这是kqueue的一个固有缺陷,因为它使用文件描述符来监视文件。加上watchdog为了监视文件描述符而需要做的巨大数量的簿记,这使得监视文件和目录变得痛苦。本质上,kqueue并不是监视大量文件和目录的深层嵌套目录的好方法。

关于与Vim等编辑器一起使用watchdog

Vim只有在被指示修改文件时才会修改文件。它创建备份文件,然后将其交换到磁盘上以替换您正在编辑的文件。这意味着如果您使用Vim来编辑文件,则watchdog不会触发这些文件的修改事件。您可能需要适当配置Vim以禁用此功能。

关于与CIFS一起使用watchdog

当您想要监视CIFS中的更改时,您需要明确告诉watchdog使用PollingObserver,也就是说,不要像上面的示例那样让watchdog决定合适的观察者,而是执行以下操作:

from watchdog.observers.polling import PollingObserver as Observer

依赖

  1. Python 3.9或更高版本。

  2. XCode(仅当从源安装时在macOS上使用)

  3. PyYAML(仅用于watchmedo

许可

Watchdog遵循Apache License,版本2.0的条款。

  • 版权 2018-2024 Mickaël Schoentgen & 贡献者

  • 版权 2014-2018 Thomas Amland & 贡献者

  • 版权 2012-2014 Google, Inc.

  • 版权 2011-2012 Yesudeep Mangalapilly

项目源代码可在GitHub上找到。请在问题跟踪器中报告错误并提交增强请求。

为什么选择Watchdog?

太多人试图做同样的事情,但没有一个人做到我需要的Python功能

变更日志

5.0.3

2024-09-27 • 完整历史

  • [inotify] 改进清理 Inotify 线程,并添加 eventlet 测试用例 (#1070)

  • 感谢我们的亲爱的贡献者:@BoboTiG, @ethan-vanderheijden

5.0.2

2024-09-03 • 完整历史

  • 启用针对特定操作系统的Mypy检查 (#1064)

  • [watchmedo] 修复 tricks 参数类型 schedule_tricks() (#1063)

  • 感谢我们的亲爱的贡献者:@gnought, @BoboTiG

5.0.1

2024-09-02 • 完整历史

  • [kqueue] 修复 TypeError: kqueue.control() 只接受位置参数 (#1062)

  • 感谢我们的亲爱的贡献者:@apoirier, @BoboTiG

5.0.0

2024-08-26 • 完整历史

重大变更

  • 停止支持Python 3.8 (#1055)

  • [核心] 强制使用正确的关键字参数 (#1057)

  • BaseObserverSubclassCallable类重命名为ObserverType#1055

  • inotify_event_struct类重命名为InotifyEventStruct#1055

  • UnsupportedLibc异常重命名为UnsupportedLibcError#1057

  • 移除InotifyConstants.IN_CLOSE常量(#1046

  • LogLevelException异常重命名为LogLevelError#1057

  • WatchdogShutdown异常重命名为WatchdogShutdownError#1057

  • FILE_NOTIFY_INFORMATION类重命名为FileNotifyInformation#1055

  • 移除未使用的WATCHDOG_TRAVERSE_MOVED_DIR_DELAY常量(#1057

其他更改

  • 启用disallow_untyped_calls Mypy规则(#1055

  • 启用disallow_untyped_defs Mypy规则(#1060

  • 改进事件的类型引用(#1040

  • 添加对IN_CLOSE_NOWRITE事件的支持。将触发FileClosedNoWriteEvent事件,并引入了其on_closed_no_write()分发器(#1046

  • 感谢我们亲爱的贡献者:@BoboTiG

4.0.2

2024-08-11 • 完整历史

  • 添加对Python 3.13的支持(#1052

  • 运行ruff,应用几个修复(#1033

  • events.py中移除执行权限

  • 更新PatternMatchingEventHandler文档字符串(#1048

  • 简化快速入门示例(#1047

  • 将缺失的event_filter关键字参数添加到FSEventsObserver.schedule()#1049

  • 修复AutoRestartTrick中可能出现的竞态条件(#1002

  • watchmedo.py中移除执行权限

  • 感谢我们亲爱的贡献者:@BoboTiG, @nbelakovski, @ivg

4.0.1

2024-05-23 • 完整历史

  • 修复完整发射器的缺失event_filter#1032

  • 感谢我们亲爱的贡献者:@mraspaud, @BoboTiG

4.0.0

2024-02-06 • 完整历史

  • 停止支持Python 3.7。

  • 添加对Python 3.12的支持。

  • dirsnapshot添加类型(#1012

  • 添加DirectorySnapshotDiff.ContextManager#1011

  • 现在FileSystemEvent及其子类是dataclass``es,它们的repr()已更改

  • 现在WinAPINativeEvent 是一个 dataclass,它的 repr() 已经改变

  • LoggingEventHandler 中记录 FileOpenedEventFileClosedEvent 事件

  • 提高 FileSystemEvent 的覆盖率

  • LoggerTrick 中记录所有事件

  • 移除了 observers.read_directory_changes.WATCHDOG_TRAVERSE_MOVED_DIR_DELAY 的hack,为了防止破坏其他软件,这个常量将保留。

  • 感谢我们亲爱的贡献者:@BoboTiG,@msabramo

3.0.0

2023-03-20 • 完整历史

  • 停止支持Python 3.6。

  • watchdog 现在与PEP 561兼容,并使用 mypy 进行了测试

  • 修复了 FileSystemEvent.__repr__() 中的缺失 >#980

  • [ci] 许多改进

  • [inotify] 如果线程不活跃时未启动,则从 InotifyEmitter.queue_events() 返回(#963

  • [tests] 稳定性改进

  • [utils] 移除对 threading.Event.isSet 的拼写处理(#962

  • [watchmedo] 修复了YAML生成的技巧(#965

  • 感谢我们亲爱的贡献者:@kurtmckee,@altendky,@agroszer,@BoboTiG

2.3.1

2023-02-28 • 完整历史

  • 在整个源代码上运行 black

  • requirements-tests.txt 文件打包到源分布中(#939

  • [watchmedo] 从 AutoRestartTrickShellCommandTrick 中排除 FileOpenedEvent 事件,以恢复watchdog < 2.3.0的行为。未来应找到更好的解决方案。(#949

  • [watchmedo] 在 LoggerTrick 中记录 FileOpenedEventFileClosedEvent 事件

  • 感谢我们亲爱的贡献者:@BoboTiG

2.3.0

2023-02-23 • 完整历史

  • [inotify] 添加对 IN_OPEN 事件的支撑:将触发 FileOpenedEvent 事件(#941

  • [watchmedo] 为 auto-restart 添加可选的事件去抖动,如果连续发生多个事件,则只重启一次(--debounce-interval)(#940

  • [watchmedo] 在 KeyboardInterrupt 异常(Ctrl+C)时优雅地退出(#945

  • [watchmedo] 添加选项以在命令退出后不自动重启命令(--no-restart-on-command-exit)(#946

  • 感谢我们亲爱的贡献者:@BoboTiG,@dstaple,@taleinat,@cernekj

2.2.1

2023-01-01 • 完整历史

  • 启用 mypy 以发现PEP 561中指定的类型提示(#933

  • [ci] 在构建发布文件时设置预期的Python版本

  • [ci] 更新正在使用的actions版本

  • [watchmedo] [regression] 修复在非Unix操作系统上使用缺失的 signal.SIGHUP 属性(#935

  • 感谢我们亲爱的贡献者:@BoboTiG,@simon04,@piotrpdev

2.2.0

2022-12-05 • 完整历史

  • [build] 现在为Python 3.11提供了wheel(#932

  • [documentation] 现在测试HTML文档构建的错误(#902

  • 【文档】在此处修正错别字,并参考这里 (#910)

  • 【fsevents2】fsevents2 观察者现已弃用 (#909)

  • 【测试】musl libc 返回的错误代码 -1 的错误信息现在被允许 (#923)

  • 【工具】从 dirsnapshot.py 中删除不必要的代码 (#930)

  • 【watchmedo】处理来自 SIGHUP 的关闭事件 (#912)

  • 感谢我们的宝贵贡献者:@kurtmckee, @babymastodon, @QuantumEnergyE, @timgates42, @BoboTiG

2.1.9

2022-06-10 • 完整历史

  • 【fsevents】修复了在停止发射器时断言没有错误的 flakey 测试。

  • 【inotify】在关闭时抑制偶尔出现的 OSError: [Errno 9] Bad file descriptor (#805)

  • 【watchmedo】如果子进程终止,则通过 auto-restart 重新启动子进程 (#896)

  • 【watchmedo】在运行不带有 --waitshell-command 时避免产生僵尸子进程 (#405)

  • 感谢我们的宝贵贡献者:@samschott, @taleinat, @altendky, @BoboTiG

2.1.8

2022-05-15 • 完整历史

  • 修复在观察者计划中添加失败的发射器。 (#872)

  • 【inotify】修复在卸载的文件系统中的路径上取消观察时的挂起问题。 (#869)

  • 【watchmedo】修复了 auto-restart 命令的 --kill-after 参数的解析问题。 (#870)

  • 【watchmedo】修复布尔参数的解析问题。 (#887)

  • 【watchmedo】修复了 auto-restartshell-command 的命令解析问题。 (#888)

  • 【watchmedo】支持通过 -q/--quiet-v/--verbose 参数设置详细程度。 (#889)

  • 感谢我们的宝贵贡献者:@taleinat, @kianmeng, @palfrey, @IlayRosenberg, @BoboTiG

2.1.7

2022-03-25 • 完整历史

  • 消除在等待事件队列时的时间超时。 (#861)

  • 【inotify】修复 InotifyEventnot 等于实现。 (#848)

  • 【watchmedo】修复从 Python 脚本中调用命令。 (#879)

  • 【watchmedo】仅在严格必要时加载 PyYAML。在不安装模块的情况下,简单的 watchmedo 使用是可能的。 (#847)

  • 感谢我们的宝贵贡献者:@sattlerc, @JanzenLiu, @BoboTiG

2.1.6

2021-10-01 • 完整历史

  • 【bsd】修复了 kqueue.py 中返回的路径并恢复了测试套件的总体结果。 (#842)

  • 【bsd】更新了 FreeBSD CI 支持。(#841)

  • [watchmedo] 移除了argh依赖,改为使用内置的argparse模块。(#836)

  • [watchmedo] 移除了不存在的WindowsApiAsyncObserver引用和--debug-force-winapi-async参数。

  • [watchmedo] 改进了帮助输出。

  • 感谢我们亲爱的贡献者:@knobix, @AndreaRe9, @BoboTiG

2.1.5

2021-08-23 • 完整历史

  • 修复了2.1.4中引入的回归(撤销“允许覆盖或添加自定义事件处理器到事件分发映射。(#814)”)。(#830)

  • 将类型为str的正则表达式转换为list。(831)

  • 感谢我们亲爱的贡献者:@unique1o1, @BoboTiG

2.1.4

2021-08-19 • 完整历史

  • [watchmedo] 修复了Unix-only函数os.setsid()os.killpg()的使用。(#809)

  • [mac] 修复了文件权限或所有权变更时缺少FileModifiedEvent的问题。(#815)

  • [mac] 使用os.path.realpath()FSEventsEmitter中的绝对路径转换为相对路径。(#822)

  • 修复了SkipRepeatsQueue._put()中可能出现的AttributeError。(#818)

  • 允许覆盖或添加自定义事件处理器到事件分发映射。(#814

  • 修复了在大端平台上测试的问题。(#828)

  • 感谢我们亲爱的贡献者:@replabrobin, @BoboTiG, @SamSchott, @AndreiB97, @NiklasRosenstein, @ikokollari, @mgorny

2.1.3

2021-06-26 • 完整历史

  • 发布macOS arm64universal2 wheels。(#740)

  • 感谢我们亲爱的贡献者:@kainjow, @BoboTiG

2.1.2

2021-05-19 • 完整历史

  • [mac] 修复了非递归监视时的相对路径处理。(#797

  • [windows] 在PyPy上,start()之后发生的事件被遗漏。为此添加了一个解决方案。(#796)

  • 感谢我们亲爱的贡献者:@oprypin, @CCP-Aporia, @BoboTiG

2.1.1

2021-05-10 • 完整历史

  • [mac] 修复了监视器被删除但仍在接收事件时的回调异常。(#786

  • 感谢我们亲爱的贡献者:@rom1win, @BoboTiG, @CCP-Aporia

2.1.0

2021-05-04 • 完整历史

  • [inotify] 简化了libc加载。(#776

  • [mac] 在FSEventsEmitter中添加了对非递归监视的支持。(#779

  • [watchmedo] 为tricks添加了对--debug-force-*参数的支持。(#781

  • 感谢我们亲爱的贡献者:@CCP-Aporia, @aodj, @UnitedMarsupials, @BoboTiG

2.0.3

2021-04-22 • 完整历史

  • [mac] 使用logger.debug()代替logger.info()。(#774

  • 更新了文档链接(#777

  • 感谢我们亲爱的贡献者:@globau,@imba-tjd,@BoboTiG

2.0.2

2021-02-22 • 完整历史

  • [mac] 添加缺失的异常对象(#766

  • 感谢我们亲爱的贡献者:@CCP-Aporia,@BoboTiG

2.0.1

2021-02-17 • 完整历史

  • [mac] 修复处理 Unicode 路径时的段错误(#763

  • 将 CI 从 Travis-CI 迁移到 GitHub Actions(#764

  • 感谢我们亲爱的贡献者:@SamSchott,@BoboTiG

2.0.0

2021-02-11 • 完整历史

  • 避免在 Python 3.7+ 上使用已弃用的 PyEval_InitThreads#746

  • [inotify] 添加对 IN_CLOSE_WRITE 事件的支援。将触发 FileCloseEvent 事件。注意,IN_CLOSE_NOWRITE 事件未处理以防止过多噪音。(#184#245#280#313#690

  • [inotify] 允许多次停止发射器(#760

  • [mac] 支持合并的文件系统事件(#734

  • [mac] 停止支持 macOS 10.12 及更早版本(#750

  • [mac] 修复重命名项目只更改大小写的错误(#750

  • 感谢我们亲爱的贡献者:@bstaletic,@lukassup,@ysard,@SamSchott,@CCP-Aporia,@BoboTiG

1.0.2

2020-12-18 • 完整历史

  • 为 GNU/Linux,macOS 和 Windows 发布了轮子(#739

  • [mac] 修复 fsevents 中缺失的 event_id 属性(#721

  • [mac] 如果在 fsevents 中给出字节路径,则返回字节路径(#726

  • [mac] 添加对旧 macOS 版本的兼容性(#733

  • 统一化监视目录删除事件(#727

  • 感谢我们亲爱的贡献者:@SamSchott,@CCP-Aporia,@di,@BoboTiG

1.0.1

2020-12-10 • 修复具有良好元数据的版本。

1.0.0

2020-12-10 • 完整历史

  • 版本号现在遵循 semver

  • 停止支持 Python 2.7,3.4 和 3.5

  • [mac] 对原生 fsevents 的回归修复(#717

  • [windows] winapi.BUFFER_SIZE 现在默认为 64000(而不是 2048)(#700

  • [windows] 引入 winapi.PATH_BUFFER_SIZE(默认为 2048)以保持与路径相关的函数的旧行为(#700

  • 使用标准库中的 pathlib,而不是 pathtools(#556

  • 允许 Unix 上的文件路径不遵循文件系统编码(#703

  • 已移除长期弃用的 events.LoggingFileSystemEventHandler 类,请使用 LoggingEventHandler 代替

  • 感谢我们可爱的贡献者:@SamSchott、@bstaletic、@BoboTiG、@CCP-Aporia

0.10.4

2020-11-21 • 完整历史

  • LoggingEventHandler添加logger参数(#676

  • 将可变默认参数替换为if None实现(#677

  • 将测试扩展到Python 2.7和3.5-3.10,适用于GNU/Linux、macOS和Windows

  • [mac] 对fsevents模块进行性能改进(#680

  • [mac] 在非macOS机器上防止编译watchdog_fsevents.c#687

  • [watchmedo] 更可靠地处理来自SIGTERMSIGINT的关闭事件(#693

  • 感谢我们可爱的贡献者:@Sraw、@CCP-Aporia、@BoboTiG、@maybe-sybr

0.10.3

2020-06-25 • 完整历史

  • 确保ObservedWatch.path是一个字符串(#651

  • [inotify] 允许监视单个文件(#655

  • [inotify] 防止在监视文件夹中文件没有权限时引发异常(#669#670

  • 感谢我们可爱的贡献者:@brant-ruan、@rec、@andfoy、@BoboTiG

0.10.2

2020-02-08 • 完整历史

  • 修复了macOS Catalina上的build_ext命令(#628

  • 修复了非macOS OS上macOS要求的安装问题(#635

  • 重构了FileSystemEventHandlerPatternMatchingEventHandlerRegexMatchingEventHandlerdispatch()方法

  • [bsd] 改善了非Windows/Linux平台上的测试支持(#633#639

  • [bsd] 添加了FreeBSD CI支持(#532

  • [bsd] 恢复了全面支持(#638#641

  • 感谢我们可爱的贡献者:@BoboTiG、@evilham、@danilobellini

0.10.1

2020-01-30 • 完整历史

  • 修复了当OS区域设置为POSIX时,Python 2.7到3.6的安装问题(#615

  • 修复了macOS上的build_ext命令(#618#620

  • 将要求移动到setup.cfg#617

  • [mac] 在fsevents的C实现中移除了Python 2.5的旧C代码

  • [snapshot] 添加了EmptyDirectorySnapshot#613

  • 感谢我们可爱的贡献者:@Ajordat、@tehkirill、@BoboTiG

0.10.0

2020-01-26 • 完整历史

重大变更

  • 停止支持Python 2.6、3.2和3.3

  • 现在将无法启动的发射器移除

  • [snapshot] 移除了已弃用的walker_callback参数,使用stat代替

  • [watchmedo] 工具不再默认安装,而是通过额外的watchdog[watchmedo]安装

其他更改

  • 修复了多个Python 3警告

  • 使用is_synthetic属性识别合成事件(#369

  • 使用os.scandir()改进内存使用(#503

  • [bsd] 修复了FreeBSD版本检测问题(《#529》)

  • [bsd] 跳过无法处理的套接字文件(《#509”)

  • [inotify] 修复了包含非ASCII字符的事件(《#516”)

  • [inotify] 修复了重新抛出OSError的方式(《#377”)

  • [inotify] 修复了在重命名顶级文件夹后的错误源路径(《#515”)

  • [inotify] 从非移动事件中移除了延迟(《#477”)

  • [mac] 修复了在两次调用FSEventsEmitter.stop()时的错误(《#466”)

  • [mac] 支持取消已删除的监视(《#541”)

  • [mac] 修复了watchdog_fsevents.c中缺失的字段初始化和未使用的参数

  • [snapshot] 不访问没有读权限的目录(《#408”)

  • [snapshot] 修复了在将目录替换为文件时的竞争条件崩溃(《#513”)

  • [snasphot] 修复了关于忘记的path_for_inode属性的AttributeError(《#436”)

  • [snasphot] 将ignore_device=False参数添加到构造函数(《597”)

  • [watchmedo] 修复了使用的路径分隔符(《#478”)

  • [watchmedo] 修复了使用yaml.load()代替yaml.safe_load()的问题(《#453”)

  • [watchmedo] 处理所有可用的信号(《#549”)

  • [watchmedo] 添加了--debug-force-polling参数(《#404”)

  • [windows] 修复了观察目录被删除时的问题(《#570” 和 《#601”)

  • [windows] 使WindowsApiEmitter更容易继承(《#344”)

  • [windows] 使用独立的ctypes DLL实例

  • [windows] 只有在recursive=True时才生成子创建事件(《#454”)

  • 感谢我们亲爱的贡献者:@BoboTiG, @LKleinNux, @rrzaripov, @wildmichael, @TauPan, @segevfiner, @petrblahos, @QuantumEnergyE, @jeffwidman, @kapsh, @nickoala, @petrblahos, @julianolf, @tonybaloney, @mbakiev, @pR0Ps, javaguirre, @skurfer, @exarkun, @joshuaskelly, @danilobellini, @Ajordat

0.9.0

2018-08-28 • 《完整历史

  • 现在删除观察目录将触发DirDeletedEvent事件

  • [bsd] 改进了平台检测(《#378”)

  • [inotify] 修复了正在观察的根目录被删除时的崩溃(《#374”)

  • [inotify] 处理提供uClibc的系统

  • [linux] 修复了删除目录时可能的DirDeletedEvent重复问题

  • [mac] 修复了fsevents2.py中的Unicode路径处理(《#298”)

  • [watchmedo] 添加了--debug-force-polling参数(《#336”)

  • [windows] 修复了FILE_LIST_DIRECTORY常量(《#376”)

  • 感谢我们亲爱的贡献者:@vulpeszerda, @hpk42, @tamland, @senden9, @gorakhargosh, @nolsto, @mafrosis, @DonyorM, @anthrotype, @danilobellini, @pierregr, @ShinNoNoir, @adrpar, @gforcada, @pR0Ps, @yegorich, @dhke

0.8.3

2015-02-11 • 完整历史记录

  • 修复了根日志记录器的使用(#274

  • [inotify] 重构了 libc 加载并改进了 inotify_c.py 中的错误处理

  • [inotify] 修复了 inotify_c.py 中可能出现的未绑定局部错误

  • 感谢我们亲爱的贡献者:@mmorearty, @tamland, @tony, @gorakhargosh

0.8.2

2014-10-29 • 完整历史记录

  • 如果 Observer 未运行,则事件发射器不再按计划启动

  • [mac] 修复了用于传递 clang 编译的已用参数(#265

  • [snapshot] 修复了目录删除时可能出现的竞态条件崩溃(#281

  • [windows] 修复了再次监视同一文件夹时的错误(#270

  • 感谢我们亲爱的贡献者:@tamland, @apetrone, @Falldog, @theospears

0.8.1

2014-07-28 • 完整历史记录

  • 修复了 anon_inode 描述符泄露(#249

  • [inotify] 修复了线程停止死锁(#250

  • 感谢我们亲爱的贡献者:@Witos, @adiroiban, @tamland

0.8.0

2014-07-02 • 完整历史记录

  • 修复了 argh 废弃的警告(#242

  • [snapshot] 用 mtime()inode()path() 方法替换了返回内部统计信息的方法

  • [snapshot] 废弃了 walker_callback 参数

  • [watchmedo] 修复了 auto-restart 以终止所有子进程(#225

  • [watchmedo] 添加了 --no-parallel 参数(#227

  • [windows] 修复了 INVALID_HANDLE_VALUE 的值(#123

  • [windows] 修复了八进制用法以与 Python 3 一起工作(#223

  • 感谢我们亲爱的贡献者:@tamland, @Ormod, @berdario, @cro, @BernieSumption, @pypingou, @gotcha, @tommorris, @frewsxcv

项目详情


下载文件

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

源代码分发

watchdog-5.0.3.tar.gz (129.6 kB 查看哈希值)

上传时间: 源代码

构建分发

watchdog-5.0.3-py3-none-win_ia64.whl (79.3 kB 查看哈希值)

上传时间: Python 3 Windows ia64

watchdog-5.0.3-py3-none-win_amd64.whl (79.3 kB 查看哈希值)

上传时间: Python 3 Windows x86-64

watchdog-5.0.3-py3-none-win32.whl (79.3 kB 查看哈希值)

上传时间: Python 3 Windows x86

watchdog-5.0.3-py3-none-manylinux2014_x86_64.whl (79.3 kB 查看哈希值)

上传时间: Python 3

watchdog-5.0.3-py3-none-manylinux2014_s390x.whl (79.3 kB 查看哈希值)

上传时间: Python 3

watchdog-5.0.3-py3-none-manylinux2014_ppc64le.whl (79.3 kB 查看哈希值)

上传时间: Python 3

watchdog-5.0.3-py3-none-manylinux2014_ppc64.whl (79.3 kB 查看哈希值)

上传时间: Python 3

watchdog-5.0.3-py3-none-manylinux2014_i686.whl (79.3 kB 查看哈希值)

上传时间: Python 3

watchdog-5.0.3-py3-none-manylinux2014_armv7l.whl (79.3 kB 查看哈希值)

上传时间: Python 3

watchdog-5.0.3-py3-none-manylinux2014_aarch64.whl (79.3 kB 查看哈希值)

上传时间: Python 3

watchdog-5.0.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl (88.6 kB 查看哈希值)

上传时间: PyPy macOS 11.0+ ARM64

watchdog-5.0.3-pp310-pypy310_pp73-macosx_10_15_x86_64.whl (88.2 kB 查看哈希值)

上传时间: PyPy macOS 10.15+ x86-64

watchdog-5.0.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl (88.6 kB 查看哈希值)

上传时间: PyPy macOS 11.0+ ARM64

watchdog-5.0.3-pp39-pypy39_pp73-macosx_10_15_x86_64.whl (88.2 kB 查看哈希值)

上传时间: PyPy macOS 10.15+ x86-64

watchdog-5.0.3-cp313-cp313-macosx_11_0_arm64.whl (89.3 kB 查看哈希值)

上传时间: CPython 3.13 macOS 11.0+ ARM64

watchdog-5.0.3-cp313-cp313-macosx_10_13_x86_64.whl (88.7 kB 查看哈希值)

上传时间: CPython 3.13 macOS 10.13+ x86-64

watchdog-5.0.3-cp313-cp313-macosx_10_13_universal2.whl (96.7 kB 查看哈希值)

上传时间: CPython 3.13 macOS 10.13+ universal2 (ARM64, x86-64)

watchdog-5.0.3-cp312-cp312-macosx_11_0_arm64.whl (89.3 kB 查看哈希值)

上传时间: CPython 3.12 macOS 11.0+ ARM64

watchdog-5.0.3-cp312-cp312-macosx_10_13_x86_64.whl (88.7 kB 查看哈希值)

上传时间: CPython 3.12 macOS 10.13+ x86-64

watchdog-5.0.3-cp312-cp312-macosx_10_13_universal2.whl (96.7 kB 查看哈希值)

上传于 CPython 3.12 macOS 10.13+ universal2 (ARM64, x86-64)

watchdog-5.0.3-cp311-cp311-macosx_11_0_arm64.whl (89.3 kB 查看哈希值)

上传于 CPython 3.11 macOS 11.0+ ARM64

watchdog-5.0.3-cp311-cp311-macosx_10_9_x86_64.whl (88.7 kB 查看哈希值)

上传于 CPython 3.11 macOS 10.9+ x86-64

watchdog-5.0.3-cp311-cp311-macosx_10_9_universal2.whl (96.7 kB 查看哈希值)

上传于 CPython 3.11 macOS 10.9+ universal2 (ARM64, x86-64)

watchdog-5.0.3-cp310-cp310-macosx_11_0_arm64.whl (89.3 kB 查看哈希值)

上传于 CPython 3.10 macOS 11.0+ ARM64

watchdog-5.0.3-cp310-cp310-macosx_10_9_x86_64.whl (88.7 kB 查看哈希值)

上传于 CPython 3.10 macOS 10.9+ x86-64

watchdog-5.0.3-cp310-cp310-macosx_10_9_universal2.whl (96.7 kB 查看哈希值)

上传于 CPython 3.10 macOS 10.9+ universal2 (ARM64, x86-64)

watchdog-5.0.3-cp39-cp39-macosx_11_0_arm64.whl (89.3 kB 查看哈希值)

上传于 CPython 3.9 macOS 11.0+ ARM64

watchdog-5.0.3-cp39-cp39-macosx_10_9_x86_64.whl (88.6 kB 查看哈希值)

上传于 CPython 3.9 macOS 10.9+ x86-64

watchdog-5.0.3-cp39-cp39-macosx_10_9_universal2.whl (96.6 kB 查看哈希值)

上传于 CPython 3.9 macOS 10.9+ universal2 (ARM64, x86-64)

由...