【问题标题】:Python watchdog not firing all eventsPython看门狗没有触发所有事件
【发布时间】:2014-04-05 05:12:55
【问题描述】:

我正在尝试查看一些文本文件何时使用watchdog 进行修改,但我似乎只获得.tmp 文件的事件。我知道崇高文本是如何保存文件的,但我不应该也为实际文件触发一个事件吗?

这是我在尝试以崇高文本将文件保存在位置 /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()

【问题讨论】:

  • 我不知道,但我认为你应该尝试github.com/seb-m/pyinotify 看看它是否有同样的问题。
  • 首先弄清楚 sublime text 实际上在保存文件时做了什么。例如。使用inotifywait -m . 确认您期望的创建/删除事件确实发生了。否则一切都是猜测。我假设使用 touch 和 rm 时没有此类问题。
  • 如果您将 MyHandler 类更改为看门狗 LoggingEventHandler(),您可以跟踪更改。但是,我不确定为什么在我们编写自己的处理程序时它会丢失更改

标签: python file-io watchdog


【解决方案1】:

这是创建临时文件的编辑器的常见问题。 在看门狗包页面 (https://pypi.python.org/pypi/watchdog) 中,您可以找到有关 vim 的说明:

关于在 Vim 等编辑器中使用看门狗

除非有指示,否则 Vim 不会修改文件。它创建备份文件,然后将它们交换以替换您在磁盘上编辑的文件。这意味着如果你使用 Vim 来编辑你的文件,这些文件的 on-modified 事件将不会被 watchdog 触发。您可能需要适当配置 Vim 以禁用此功能。

在 Sublime 中要禁用 tmp 文件的创建,您必须转到 Preferences --> Settings-User 并禁用原子保存。

"atomic_save": false

【讨论】:

  • 我知道这一点,我询问的是我也没有收到实际文件的事件。
  • 如果您意识到这一点,您应该知道除非您更改编辑器的行为,否则您不会收到实际文件的事件。当您保存更改时,看门狗正在监视的文件会被删除,在那一刻看门狗会丢失指向该文件的指针。重命名最后一个临时文件时,将创建一个与您观看的文件同名的新文件。
  • 你也可以给看门狗打补丁,让它不检查是否在看同一个inode github.com/gorakhargosh/watchdog/issues/56#issuecomment-1796482
  • 你应该检查github中的问题,你会发现看门狗在Linux中使用inotify,这会导致删除和移动文件的大量错误(sublime在使用原子保存时会做什么)。 github.com/gorakhargosh/watchdog/…github.com/gorakhargosh/watchdog/…
  • @JuanE。其中除了一个(将文件从 unwatched 文件夹移动到监视文件夹)之外的所有文件夹都已关闭。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-25
  • 1970-01-01
  • 2013-09-21
  • 2016-04-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多