python - 看门狗模块不通知目录重命名?
问题描述
我需要监视文件,这些文件有时是由笨拙的应用程序在目录的子目录中创建的logs/
:
logs/foo/per_process_dir/journal.log
我的小守护程序是用 Python 编写的,并使用看门狗模块来监视文件(Linux 上的模块使用 inotify)。我只是要求模块foo/
(递归地)监视子目录,并且每当附加日记时它都会通知我...
这一切都有效,但是......当应用程序重新启动时,整个logs/
目录都会旋转 - 我希望我的守护进程自动注意到这一点,这样就不需要重新启动它了。
我希望收到一个“已移动”事件——例如,当logs/
重命名logs-Sunday/
为时——但它没有发生……这个守护进程目前很小,我不愿意通过添加logs/
单独查看文件夹的代码来放大它。
或许还有别的办法?
解决方案
如果要捕获logs
目录的重命名,则需要将观察者附加到其父目录。也就是说,如果您的logs
目录实际上是appname/logs
,则不要调用,例如:
observer.schedule(event_handler, 'appname/logs', recursive=True)
你会使用:
observer.schedule(event_handler, 'appname', recursive=True)
(随后您将需要过滤事件并忽略目录之外的事件logs
。)
发生这种情况是因为您的文件系统观察者附加到logs
目录。当您重命名logs
目录时,您的观察者会继续监视它……在新名称下。也就是说,观察者连接到 inode,而不是路径。
推荐阅读
- python-3.x - 在 PIL 中显示多个图像
- css - Css 在 Chrome 和 Firefox 中选择框
- javascript - 仅屏蔽 9 位数字
- java - 从 5.x 升级到 7.x 后,Twilio 无法处理多个 Auth 帐户
- sql-server - 序列是否有像 min_active_rowversion 这样的函数?
- javascript - 循环抓取不应该的数据并使用它
- python - 如何在 Python 2.7 中读取文件名的特定字符
- xml - XML - XSLT - 使用两个 XML 输入文档
- python - read_data_sets 已弃用,将在未来版本中删除。更新说明
- python - 努力用 crontab 运行 python 脚本