2

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

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

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

4

1 回答 1

1

来自Watchdog GitHub自述文件:

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

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

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

有关更多信息(以及解决 vim/vi 的特定信息),请参阅看门狗 GitHub 上的此问题。

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

:set nobackup
:set nowritebackup

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

于 2016-02-17T05:24:39.313 回答