1

Windows の特定のディレクトリに追加された .jpg 写真のファイルを監視するために、修正したウォッチドッグの例を作成しました。

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

paths = []

xp_mode = 'off'

class FileHandler(FileSystemEventHandler):

    def on_created(self, event):
        if xp_mode == 'on':
            if not event.is_directory and not 'thumbnail' in event.src_path:
                print "Created: " + event.src_path
                paths.append(event.src_path)

    def on_modified(self, event):
        if not event.is_directory and not 'thumbnail' in event.src_path:
            print "Modified: " + event.src_path
            paths.append(event.src_path)

if __name__ == "__main__":
    path = 'C:\\'
    event_handler = FileHandler()
    observer = Observer()
    observer.schedule(event_handler, path, recursive=True)
    observer.start()
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observe r.stop()

    observer.join()

ファイルが追加されると、on_created と on_modified の両方が呼び出されることに気付きました。この問題に対処するために、on_modified メソッドのみを使用することにしました。ただし、これにより複数のコールバックが発生することに気付き始めていますが、今回は on_modified メソッドに対してです!

Modified: C:\images\C121211-0008.jpg
Modified: C:\images\C121211-0009.jpg
Modified: C:\images\C121211-0009.jpg <--- What?
Modified: C:\images\C121211-0010.jpg
Modified: C:\images\C121211-0011.jpg
Modified: C:\images\C121211-0012.jpg
Modified: C:\images\C121211-0013.jpg

なぜこれが起こっているのか、一生理解できません!それも一貫していないようです。誰かがこの問題に光を当てることができれば、それは大歓迎です。

同様の投稿がありましたが、Linux 向けでした: python watchdog modified and created duplicate events

4

1 に答える 1