Python watchdog未触发所有事件
我正在尝试使用 watchdog
来监控一些文本文件的修改情况,但我发现只收到 .tmp
文件的事件。我知道这是因为 sublime text 在保存文件时的处理方式,但我不应该也能收到实际文件的事件吗?
这是我在 sublime text 中尝试保存文件时,在 /home/john/resources/css/style.css
这个位置看到的内容:
/home/john/resources/css/.sublaa.tmp
/home/john/resources/css/.sublaa.tmp
/home/john/resources/css/.sublaa.tmp
看起来我只收到了 .tmp
文件的事件,而没有收到实际文件的事件。在 MacOSX 上这个功能正常,但在 Ubuntu 上却不行。
#!/usr/bin/python
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
class MyHandler(FileSystemEventHandler):
def on_any_event(self, event):
print event.src_path
if __name__ == "__main__":
event_handler = MyHandler()
observer = Observer()
observer.schedule(event_handler, path='.', recursive=False)
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
1 个回答
2
这是一个常见的问题,主要出现在一些编辑器创建临时文件的时候。在watchdog这个包的页面(https://pypi.python.org/pypi/watchdog)上,有一段关于Vim的说明:
关于在像Vim这样的编辑器中使用watchdog
Vim不会自动修改文件,除非你特别指示它去做。它会先创建备份文件,然后再用这些备份文件替换你正在编辑的文件。这就意味着,如果你用Vim来编辑文件,watchdog就不会检测到这些文件的修改事件。你可能需要对Vim进行一些设置,以关闭这个功能。
在Sublime中,如果想要关闭临时文件的创建,你需要进入“偏好设置” --> “用户设置”,然后禁用原子保存功能。
"atomic_save": false