【发布时间】:2009-08-26 07:40:05
【问题描述】:
试图找出是否有任何好的模块可以持续监控目录,并且一旦有新文件,就会启动许多功能?
也不应对通过 FTP 传入的部分传输文件执行操作。
【问题讨论】:
标签: python
试图找出是否有任何好的模块可以持续监控目录,并且一旦有新文件,就会启动许多功能?
也不应对通过 FTP 传入的部分传输文件执行操作。
【问题讨论】:
标签: python
我正在实现一个名为 watchdog 的跨平台库,它 可能是您正在寻找的东西。可在 http://github.com/gorakhargosh/watchdog
HTH。 =)
【讨论】:
您正在寻找文件系统事件模块。
您正在运行哪个操作系统?
(免责声明:我正在维护这两个模块)
【讨论】:
除了 NicDumZ 的优秀模块之外,您可能还需要考虑 pyinotify 以获得丰富(且文档丰富)的替代方案。我认为 Nic 的更简单(至少对于基本功能而言),但我没有详细研究它——我对 pyinotify 更熟悉。顺便说一句,有趣的是,后者是用纯 Python 编写的(当然是 ctypes;-)。
既然您确实提到了“应该能够与 unix 一起工作”,您应该准确指定您需要支持哪些 unix 版本,并研究它们是否提供类似的功能(如果可以,通过什么接口)。例如,这个 inotify 的 man page 说:
inotify API 是特定于 Linux 的。其他一些系统提供 类似的机制,例如,FreeBSD 有 kqueue,Solaris 有 /dev/poll。
Nic 已经提到了 MacOSX 上的 FSEvents。一旦确定了在感兴趣的给定系统上执行此操作的 C 方法,最坏的情况是,如果没有预制的 Python 版本,您可能可以使用ctypes,类似于 pyinotify 对 inotify 所做的方式。顺便说一句,为了完整起见:在 Windows 上,您可以使用 ReadDirectoryChangesW(通常您可以通过 ctypes 或 Win32 扩展的 win32file 文件来执行此操作)。
【讨论】:
高级库通常为它们所使用的每个平台实施不同的解决方案。运气好的话,您只需要使用一种方法——高级库。
见this non-python Question about file monitoring
具体来说,如果您可以将 QT 的 QFileSystemwatcher 与 python 绑定一起使用,或者 GLib 的 GFileMonitor(我在我的应用程序中使用它,尽管它只是用于 Linux),您可能会节省工作。
【讨论】: