监控文件/目录的内容?

63

我正在寻找一个跨平台的文件监控Python包?我知道可以使用pywin32在Windows上监视文件,并且有适用于Linux / Unix的软件包,但是否有人知道一个跨平台的软件包?


2
Tim Golden在这里提供了一个非常简单的跨平台方法,使用os.listdir轮询目录:http://timgolden.me.uk/python/win32_how_do_i/watch_directory_for_changes.html - mechanical_meat
2
“Monitor”是什么意思?请提供一些提示,说明您正在尝试做什么。 - S.Lott
5个回答

98

我正在开发一个基于MIT许可的库,帮助Python程序尽可能地跨平台监视文件系统事件。 目前还存在一些差异需要解决。当前版本为高度Alpha版:

请在此处查看: http://github.com/gorakhargosh/watchdog/

欢迎提交补丁和贡献。


4
现在显然已经支持py3k了。 - Fake Name
1
这绝对是必须被接受的答案。运行得非常好 :) 这里是 watchdog 的用法:http://pythonhosted.org/watchdog/quickstart.html - swdev
这个还在使用吗? - DonyorM
只想说这个项目仍在积极开发中,看起来非常棒。谢谢! - Johndt
2
最后更新是三年前,我还应该使用这个库还是转而使用像watchgod这样的东西? - Marcus Mann
显示剩余4条评论

33

针对基于 Unix/Linux 系统,您应该使用File Alteration Monitor Python绑定来连接libfam

针对基于 Windows 的系统,您应该连接到 Win32 API FindFirstChangeNotification及相关函数。

至于跨平台方式,我不知道一个好的跨平台方式。检测操作系统后,最好构建一个可以在两个操作系统上运行的模块,使用以上两种方法之一。


1
你能否举个例子来解释如何使用W32 API,因为我不太明白... - wishi

3

4
可能是因为监视程序的作者在一年前的回答中提到过它,并且这个回答中没有太多信息。可能不值得点踩,但也不值得点赞。 - fencepost
2
我喜欢它,因为他说他用过它,感觉还不错。 - Pedro
1
我从来不明白为什么一个答案会被踩。这里是 watchdog 的用法:http://pythonhosted.org/watchdog/quickstart.html - swdev

2
我找到了这个链接,它谈论了你的问题。虽然它并没有真正提供解决方案/库,但我认为它会有所帮助。 http://www.stepthreeprofit.com/2008/06/cross-platform-monitoring-of-filesystem.html 我认为目前还没有跨平台的解决方案,所以你可能需要自己开发。
我在这个领域经验不足,所以我不太确定。希望这可以帮助到你。
注意: 我被纠正了,gamin可用于cygwin,正如Adam Bernier在评论中指出的那样。如果存在其他选项,您可能需要研究cygwin上的其他选项。

在Linux上,Gamin似乎有一些不错的反馈。顺便说一句,Gamin在cygwin软件包中列出:http://cygwin.com/packages/ - mechanical_meat
啊!cygwin!我没有想到那个。我纠正了。 - batbrat

0
在 Linux 上最简单的方法是使用 inotifywait(假设您的内核足够新)。 您不需要任何特殊的绑定,inotifywait 可以按您想要的任何方式自定义以在标准输出上打印输出行。 可以参考 this question 了解一个很好的示例。

他特别提到了跨平台。inotifywait仅适用于Linux。 - Quintin Par

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接