pythonでwatchdogのイベントが二回発火してる原因が分からない
watchdogでフォルダを監視して変更があった場合printするものなんですが
なぜかon_modifiedの中身が二回表示されます。
以下がソースと結果です。
# -*- coding: utf-8 -*-
from watchdog.events import FileSystemEventHandler
from watchdog.observers import Observer
import os
import time
target_dir = r"対象フォルダのパス"
class ChangeHandler(FileSystemEventHandler):
def on_modified(self, event):
filepath = event.src_path
filename = os.path.basename(filepath)
print('%sを変更しました' % filename)
if __name__ in '__main__':
while 1:
event_handler = ChangeHandler()
observer = Observer()
observer.schedule(event_handler, target_dir, recursive=True)
observer.start()
try:
while True:
time.sleep(0.1)
except KeyboardInterrupt:
observer.stop()
observer.join()
このファイルを実行して、対象フォルダにある例えばtest.txtを編集して保存を1度すると実行中の窓に
test.txtを変更しました
test.txtを変更しました
と、二度printされてしまいます。
どうすればちゃんと編集された回数分の1回だけ出るようになるのでしょうか?
ちなみに下記のようなon_createdは期待通りの動きで
class ChangeHandler(FileSystemEventHandler):
def on_created(self, event):
filepath = event.src_path
filename = os.path.basename(filepath)
print('%sができました' % filename)
def on_modified(self, event):
filepath = event.src_path
filename = os.path.basename(filepath)
print('%sを変更しました' % filename)
これで新しいテキストファイルを作ると1度だけ~ができました、と出ます。
でもこの状態で例えばtest.txtをCtrl+D&Dで同じフォルダ内にコピーすると
test - コピー.txtができました
test - コピー.txtを変更しました
test - コピー.txtを変更しました
やはりmodifiedのほうは二回分こう出力されます。
ご指導宜しくお願い致します。
追記:以下環境です。
OS Windows7 64bit
Python 3.7.1
Watchdog 0.9.0
以上です、宜しくお願いします。