问题描述
我编写了一个脚本,该脚本观察用于创建新文件的目录。我设置了一个拆分功能,从提供观察者的目标目录中拆分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
函数的作用域中,因此可以在函数内部使用。