Python Watchdog是否获得刚创建的文件的名称?

问题描述

我编写了一个脚本,该脚本观察用于创建新文件的目录。我设置了一个拆分功能,从提供观察者的目标目录中拆分event.src_path。这使我能够成功获取文件名。

请参见下面的脚本

def on_created(event):
    source_path = event.src_path
    file_name = source_path.split(TargetDir,1)[1]
    print(f"{file_name} was just Created")

if __name__ == "__main__":
    for dir in range(len(TargetDir)):
        event_handler = FileSystemEventHandler()
        event_handler.on_created = on_created

        observer = Observer()
        observer.schedule(event_handler,path = TargetDir[0],recursive=True)

        observer.start()

但是,现在我试图输入目标目录列表,并遍历每个目录并调用on_created()方法。现在,显然目标目录不再是全局变量,我需要尝试将每个Dir传递给函数。我正在使用看门狗,并且认为不可能在on_created()函数添加额外的参数。如果我错了,请告诉我该怎么做?否则,有没有更简单的方法来仅获取创建文件名称,而不是仅出于此原因而不传入目标目录?我可以获取event.src,但是它提供了完整路径,如果扫描多个目录,我将不知道在哪里拆分它。

解决方法

一种简单的方法是为每个目录传递不同的函数,例如:

def create_callback(dir):
    def on_create(event):
        source_path = event.src_path
        file_name = source_path.split(dir,1)[1]
        print(f"{file_name} was just Created")
    return on_create

if __name__ == "__main__":
    for dir in range(len(TargetDir)):
        event_handler = FileSystemEventHandler()
        event_handler.on_created = create_callback(dir)

        observer = Observer()
        observer.schedule(event_handler,path=TargetDir[0],recursive=True)

        observer.start()

dir变量附加在on_create函数的作用域中,因此可以在函数内部使用。