使用python-watchdog监控文件夹,但重命名文件后无法获取新文件名

5 投票
1 回答
5158 浏览
提问于 2025-04-18 12:16

在使用watchdog监控文件时,如果你重命名一个文件,会触发一个叫做on_moved的事件。我的问题是,触发这个事件后,我无法知道文件被重命名成了什么名字(因为on_moved事件在文件被重命名时也会发生)。请问watchdog里有没有内置的解决办法,还是我需要在我写的程序里自己想办法?

下面是一些示例代码

#!/usr/bin/python
'''
Created on 2014-07-03
'''

import sys
import time

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

'''
Extend FileSystemEventHandler to be able to write custom on_any_event method
'''
class MyHandler(FileSystemEventHandler):
    '''
    Overwrite the methods for creation, deletion, modification, and moving
    to get more information as to what is happening on output
    '''
    def on_created(self, event):
        print("created: " + event.src_path)

    def on_deleted(self, event):
        print("deleted: " + event.src_path)

    def on_modified(self, event):
        print("modified: " + event.src_path)

    def on_moved(self, event):
        print("moved/renamed: " + event.src_path)


watch_directory = sys.argv[1]       # Get watch_directory parameter

event_handler = MyHandler()

observer = Observer()
observer.schedule(event_handler, watch_directory, True)
observer.start()

'''
Keep the script running or else python closes without stopping the observer
thread and this causes an error.
'''
try:
    while True:
        time.sleep(1)
except KeyboardInterrupt:
    observer.stop()
observer.join()

这段代码会在每次发生事件时打印出来,告诉你发生了什么类型的事件以及文件或文件夹的路径。它需要一个参数,就是要监控的文件夹路径。

1 个回答

9

如果你不知道一个对象有哪些方法和属性,可以使用 print dir(obj) 这个命令。在你的例子中,使用 event.dest_path 就可以了。

撰写回答