对于手动编辑的文件,inotify IN_CLOSE_WRITE 仅触发一次
Posted
技术标签:
【中文标题】对于手动编辑的文件,inotify IN_CLOSE_WRITE 仅触发一次【英文标题】:inotify IN_CLOSE_WRITE fires only once for manually edited file 【发布时间】:2013-11-21 17:37:07 【问题描述】:我正在运行带有 gevent 和 gevent_inotifyx 的 python 来观察文件是否有任何修改,使用 IN_CLOSE_WRITE
掩码等待文件在写入后关闭。我第一次触发了我的事件,但在那之后就没有了。我使用 vim 手动编辑文件。
使用不同的日志文件进行监视,并且按预期工作。这是一个 python 日志文件,只要日志文件随内容发生更改,我就会触发一个事件。
以前有人遇到过这种情况吗?这可能是由于某些同步或刷新到磁盘造成的吗?
【问题讨论】:
您希望在 vim 中看到哪些特定命令伴随IN_CLOSE_WRITE
事件?
安装命令行工具inotifywait
,运行它并检查当你通过vim编辑文件时它报告的事件。如果它报告IN_CLOSE_WRITE
事件(就像我在最后尝试此操作时所做的那样),则可能在您的代码中
在vim中我用:wq
保存,我试试inotifywait
调试告诉你,谢谢。
我试过这个命令,inotifywait -m -e close_write /home/python_tools/logging.conf
你是否也在 inotifywait 中使用这些开关?当我用 vim 手动编辑它时,我根本看不到任何事件。但是当我对日志文件使用相同的命令时,我会在文件被修改时引发 close_write 事件。我开始考虑 vim 是否进行了不同步的系统调用。我也会和其他编辑一起尝试..
Get vim to modify the file instead of moving the new version on it?的可能重复
【参考方案1】:
默认情况下,Vim 将文件内容写入一个临时文件,然后将其移到原始文件上,参见:help backup
。由于现在这是一个不同的文件(句柄),您的事件将停止触发。
你可以通过设置让 Vim 覆盖原文件
:set backupcopy=yes
如果您想普遍处理此问题,则必须改为监视文件的目录并注意文件移动。
【讨论】:
以上是关于对于手动编辑的文件,inotify IN_CLOSE_WRITE 仅触发一次的主要内容,如果未能解决你的问题,请参考以下文章