Python 看门狗事件未返回整个 src_path

Python watchdog event not returning entire src_path

我正在使用 python 看门狗来跟踪哪些文件已在本地更改。因为我不是跟踪整个目录而是跟踪特定文件,所以我使用看门狗 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 发行版的默认文本编辑器...在此先感谢。

来自 Watchdog GitHub 自述文件:

Vim does not modify files unless directed to do so. It creates backup files and then swaps them in to replace the files you are editing on the disk. This means that if you use Vim to edit your files, the on-modified events for those files will not be triggered by watchdog. You may need to configure Vim to appropriately to disable this feature.

正如引文所说,您的问题是由于这些文本编辑器修改文件的方式造成的。基本上不是直接修改文件,而是创建 "buffer" 文件来存储编辑后的数据。在您的情况下,该文件可能是 .goutputstream-XXXXXX。当您点击保存时,您的原始文件将被删除,缓冲区文件将被重命名到它的位置。所以你的第二个路径很可能是原始文件被删除的结果。有时这些文件作为备份,但仍然会导致类似的问题..

到目前为止,解决此问题最简单的方法是在您选择的文本编辑器中禁用奇怪的保存方式。在 gedit 中,这是通过取消选中首选项中的 "Create a backup copy of file before saving" 选项来完成的。这将阻止创建这些备份文件并简化看门狗的工作。 图像和偏好信息无耻地从 this AskUbuntu question

中窃取

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

基本上 Vim 您需要 运行 这些命令来禁用 backup/swapping 中的功能:

:set nobackup
:set nowritebackup

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