下面我将为您提供详细的安装步骤、常见问题解决方案以及一个简单的使用示例。

安装步骤
pyinotify 可以通过 Python 的标准包管理工具 pip 来安装。
打开终端或命令行
您需要打开一个终端窗口(在 Linux 或 macOS 上)或命令提示符/PowerShell(在 Windows 上)。
使用 pip 安装
在终端中,输入以下命令:
pip install pyinotify
说明:

- 如果您的系统中有多个 Python 版本(Python 2 和 Python 3),您可能需要使用
pip3来确保为 Python 3 安装:pip3 install pyinotify
- 如果您没有将
pip添加到系统环境变量中,您可能需要使用 Python 的-m标志来运行它:python -m pip install pyinotify # 或者针对 Python 3 python3 -m pip install pyinotify
验证安装
安装完成后,您可以通过以下命令来验证 pyinotify 是否已经成功安装:
python -c "import pyinotify; print(pyinotify.__version__)"
如果看到版本号输出(9.6),则表示安装成功。
重要前提:Linux 内核支持
pyinotify 的核心依赖于 Linux 内核的 inotify 机制,这意味着:
- ✅ 可以运行的平台:
- Linux: 完美支持,绝大多数现代 Linux 发行版(如 Ubuntu, Debian, CentOS, Fedora 等)默认都启用了
inotify。
- Linux: 完美支持,绝大多数现代 Linux 发行版(如 Ubuntu, Debian, CentOS, Fedora 等)默认都启用了
- ❌ 无法运行的平台:
- Windows:
pyinotify无法在 Windows 上工作,Windows 没有内核级的inotify机制。 - macOS:
pyinotify无法在 macOS 上工作,macOS 使用的是FSEvents机制。
- Windows:
Windows 和 macOS 用户怎么办?
如果您需要在 Windows 或 macOS 上实现文件监视功能,请使用以下替代方案,它们是跨平台的:
-
watchdog(强烈推荐)watchdog是一个跨平台的文件系统事件监视库,它在 Windows 上使用ReadDirectoryChangesW,在 macOS 上使用FSEvents,在 Linux 上使用inotify,API 设计与pyinotify类似,非常易于迁移。安装:
pip install watchdog
-
python-watchdog这就是watchdog的包名,和上面一样。
简单使用示例
以下是一个使用 pyinotify 监视当前目录下所有文件(包括子目录)的简单示例,当有文件被创建、修改或删除时,程序会打印出相应的事件。
重要: 请在 Linux 系统 上运行此代码。
# -*- coding: utf-8 -*-
import os
import time
import pyinotify
# 1. 定义一个事件处理类
# 这个类需要继承自 pyinotify.ProcessEvent
class EventHandler(pyinotify.ProcessEvent):
def process_default(self, event):
"""
这是默认的事件处理方法,会处理所有未被其他方法捕获的事件。
"""
# event.pathname: 被操作的文件的完整路径
# event.dir: 布尔值,True 表示是目录,False 表示是文件
# event.mask: 事件的类型码
print(f"事件: {event.maskname} | 路径: {event.pathname} | 是目录: {event.dir}")
# 你可以重写特定的事件处理方法来获得更精细的控制
def process_IN_CREATE(self, event):
"""当文件或目录被创建时触发"""
print(f"-> [创建] {event.pathname}")
def process_IN_DELETE(self, event):
"""当文件或目录被删除时触发"""
print(f"-> [删除] {event.pathname}")
def process_IN_MODIFY(self, event):
"""当文件被修改时触发"""
print(f"-> [修改] {event.pathname}")
def process_IN_MOVED_FROM(self, event):
"""当文件或目录被移动(源路径)时触发"""
print(f"-> [移动出] {event.pathname}")
def process_IN_MOVED_TO(self, event):
"""当文件或目录被移动(目标路径)时触发"""
print(f"-> [移入] {event.pathname}")
if __name__ == "__main__":
# 2. 创建一个事件处理器实例
event_handler = EventHandler()
# 3. 创建一个 WatchManager 管理器
# WatchManager 负责管理对哪些目录进行监视
wm = pyinotify.WatchManager()
# 4. 创建一个 Notifier
# Notifier 将事件处理器和 WatchManager 绑定在一起,并开始事件循环
# pyinotify.ALL_EVENTS 表示监视所有类型的事件
# rec=True 表示递归监视子目录
notifier = pyinotify.Notifier(wm, event_handler, default_proc_fun=event_handler.process_default)
# 5. 添加要监视的目录
# 这里监视当前脚本所在的目录
watch_path = os.path.abspath('.')
print(f"开始监视目录: {watch_path}")
print("请在另一个终端中对该目录下的文件进行操作(如创建、修改、删除文件)...")
print("按 Ctrl+C 停止监视。")
# 添加监视
# pyinotify.IN_CREATE | pyinotify.IN_DELETE | pyinotify.IN_MODIFY 表示只监视这三种事件
# rec=True 表示递归监视子目录
wm.add_watch(watch_path, pyinotify.ALL_EVENTS, rec=True)
# 6. 开始事件循环
# 这个调用会阻塞,直到监视器被停止
try:
notifier.loop()
except KeyboardInterrupt:
print("\n正在停止监视器...")
notifier.stop()
print("监视器已停止。")
如何运行示例:
- 将上述代码保存为
watcher.py文件。 - 在 Linux 终端中,进入到
watcher.py所在的目录。 - 运行脚本:
python3 watcher.py - 打开另一个新的终端,进入同一个目录,执行一些操作,
touch new_file.txt(创建文件)echo "hello" > new_file.txt(修改文件)mkdir new_dir(创建目录)rm new_file.txt(删除文件)mv new_dir renamed_dir(移动/重命名目录)
您会看到第一个终端的 watcher.py 程序实时输出相应的事件信息。
| 任务 | 命令/方法 | 备注 |
|---|---|---|
| 安装 | pip install pyinotify |
简单直接 |
| 验证 | python -c "import pyinotify" |
检查是否安装成功 |
| 平台限制 | 仅限 Linux | 依赖 Linux 内核的 inotify |
| 跨平台替代 | pip install watchdog |
推荐 Windows 和 macOS 用户使用 |
| 核心组件 | WatchManager, Notifier, ProcessEvent |
理解这三个组件是使用 pyinotify 的关键 |
希望这份详细的指南能帮助您顺利安装和使用 pyinotify!
