【问题标题】:Python watchdog event not returning entire src_pathPython 看门狗事件未返回整个 src_path
【发布时间】:2016-04-21 16:31:06
【问题描述】:

我正在使用 python watchdog 来跟踪本地更改了哪些文件。因为我不是跟踪整个目录而是跟踪特定文件,所以我使用看门狗的event.src_path 来检查更改的文件是否是我要查找的文件。

我正在使用FileSystemEventHandleron_modified,打印src_path。但是,当我在 gedit 中编辑一个应该具有路径 /home/user/project/test 的文件时,我得到了两个路径,一个看起来像 /home/user/project/.goutputstream-XXXXXX,另一个看起来像这样:home/user/project/。我从来没有得到我期待的道路。我认为看门狗或我自己的代码可能有问题,但我在vinano、我的 IDE (PyCharm)、Sublime Text、Atom 中测试了完全相同的过程......他们都给了我src_path 我期待。

我想知道 gedit 是否有解决方法,因为 gedit 是许多 Linux 发行版的默认文本编辑器...在此先感谢。

【问题讨论】:

    标签: python watch gedit python-watchdog


    【解决方案1】:

    来自Watchdog GitHub自述文件:

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

    正如引用所说,您的问题是由于这些文本编辑器如何修改文件。基本上不是直接修改文件,而是创建存储编辑数据的“缓冲区”文件。在您的情况下,此文件可能是 .goutputstream-XXXXXX。当您点击保存时,您的原始文件将被删除,并且缓冲区文件被重命名到其位置。所以你的第二条路径可能是原始文件被删除的结果。有时这些文件用作备份,但仍会导致类似问题..

    到目前为止,解决此问题的最简单方法是在您选择的文本编辑器中禁用奇怪的保存方式。在 gedit 中,这是通过取消选中首选项中的“保存前创建文件的备份副本”选项来完成的。这将阻止创建这些备份文件并简化看门狗的生活。 图片和偏好信息从this AskUbuntu question中无耻窃取

    有关更多信息(以及解决 vim/vi 的具体信息),请参阅看门狗 GitHub 上的 this issue

    基本上,对于 Vim,您需要运行以下命令来禁用备份/交换功能:

    :set nobackup
    :set nowritebackup
    

    您可以将它们添加到您的 .vimrc 以自动执行任务

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多