gpt4 book ai didi

python - OS X 上 Python 中的看门狗库——未显示完整的事件路径

转载 作者:行者123 更新时间:2023-11-28 22:54:51 26 4
gpt4 key购买 nike

我刚开始使用 Watchdog library在 Mac 上的 Python 中,我正在做一些基本测试以确保一切都像我预期的那样工作。不幸的是,它们不是——我似乎只能获得包含事件注册文件的文件夹的路径,而不是文件本身的路径。

下面是一个简单的测试程序(根据 Watchdog 提供的示例稍作修改),用于在注册事件时打印出事件类型、路径和时间。

import time
from watchdog.observers import Observer
from watchdog.events import LoggingEventHandler
from watchdog.events import FileSystemEventHandler

class TestEventHandler(FileSystemEventHandler):

def on_any_event(self, event):
print("event noticed: " + event.event_type +
" on file " + event.src_path + " at " + time.asctime())

if __name__ == "__main__":
event_handler = TestEventHandler()
observer = Observer()
observer.schedule(event_handler, path='~/test', recursive=True)
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()

src_path 变量应该包含发生事件的文件的路径。

但是,在我的测试中,当我修改一个文件时,src_path 只打印包含该文件的文件夹的路径,而不是文件本身的路径。例如,当我修改文件夹 europa 中的文件 moon.txt 时,程序会打印以下输出:

event noticed: modified on file ~/test/europa at Mon Jul  8 15:32:07 2013

我需要更改什么才能获得修改后文件的完整路径?

最佳答案

问题解决了。事实证明,OS X 中的 FSEvents 仅返回文件修改事件的目录,让您自己扫描目录以找出哪个文件被修改。虽然在 FSEvents 文档中很容易找到,但 Watchdog 文档中并未提及。

为了获取文件的完整路径,我添加了以下代码片段 (inspired by this StackOverflow thread) 以查找目录中最近修改的文件,以便在 event.src_path 返回目录时使用。

if(event.is_directory):
files_in_dir = [event.src_path+"/"+f for f in os.listdir(event.src_path)]
mod_file_path = max(files_in_dir, key=os.path.getmtime)

mod_file_path 包含修改文件的完整路径。

关于python - OS X 上 Python 中的看门狗库——未显示完整的事件路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17537291/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com