予想外のイベントが発生しています。フォルダが作成されたときにPythonウォッチドッグライブラリで複数のイベントが表示される
私は、C:\Users\kvasko\Downloads\data
というフォルダを見ています。私がフォルダをコピーする場合2017\07\25\LogFile.xml
私は1つしか見えないと思ったときに、次の3つの "created"イベントが表示されます。(もしアプリケーションがフォルダを見ている間に)私が期待するような一つの出来事。私は、単にフォルダの作成のためのイベントを取得しません。それはイベントがフォルダの作成のために生成されているようですが、私のon_created(self,event)
で伝えられた実際のイベントを調べると、3つのルックイベントは全く同じに見えます。ここで何が起こっているのですか?
ここに出力例と最小例を示します。
2017-09-22 13:58:10,182 - root - INFO - Watchdog: file created C:\Users\kvasko\Downloads\data\2017\07\25\LogFile.xml
2017-09-22 13:58:11,184 - root - INFO - Watchdog: file created C:\Users\kvasko\Downloads\data\2017\07\25\LogFile.xml
2017-09-22 13:58:12,187 - root - INFO - Watchdog: file created C:\Users\kvasko\Downloads\data\2017\07\25\LogFile.xml
私が期待する:
2017-09-22 13:58:12,187 - root - INFO - Watchdog: file created C:\Users\kvasko\Downloads\data\2017\07\25\LogFile.xml
フォルダの作成から、その実際には複数のイベントかどうかを検出する方法はありますか?
私の観察者の構成は次のとおりです。
folder = "C:\\Users\\kvasko\\Downloads\\data"
observer = Observer(MyProcessHandler(patterns=["*.xml"]), folder, recursive=True)
observer.start_observer()
os.mkdirs("C:\\Users\\kvasko\\Downloads\\data\\2017\\07\\25")
shutil.copy2("C:\temp\LogFile.xml", "C:\\Users\\kvasko\\Downloads\\data\\2017\\07\\25")
try:
while True:
time.sleep(5)
except:
print("Error")
以下は私のハンドラクラスです。
import logging
from watchdog.events import PatternMatchingEventHandler
class MyProcessHandler(PatternMatchingEventHandler):
def on_created(self, event):
logging.info("Watchdog: file created " + str(event.src_path))
編集:ここでは
が最小作業例です:
import time
import os
import shutil
import datetime
from watchdog.observers import Observer
from watchdog.events import PatternMatchingEventHandler
class TestEventHandler(PatternMatchingEventHandler):
def on_created(self, event):
print (str(datetime.datetime.now()) + " " + str(event))
if __name__ == '__main__':
path = "C:\\Temp"
event_handler = TestEventHandler(patterns=["*.xml"])
observer = Observer()
observer.schedule(event_handler, path, recursive=True)
observer.start()
os.makedirs("C:\\Temp\\2017\\07\\25")
shutil.copy2("C:\\Temp2\\2017\\07\\25\\test.xml", "C:\\Temp\\2017\\07\\25")
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
プリントアウト:
2017-09-22 15:49:51.334262 <FileCreatedEvent: src_path='C:\\Temp\\2017\\07\\25\\test.xml'>
2017-09-22 15:49:52.335468 <FileCreatedEvent: src_path='C:\\Temp\\2017\\07\\25\\test.xml'>
2017-09-22 15:49:53.340998 <FileCreatedEvent: src_path='C:\\Temp\\2017\\07\\25\\test.xml'>
EDIT2:on_any_eventするon_created
変更()( )。これが生産されたものです。
2017-09-23 13:14:57.288792 <FileCreatedEvent: src_path='C:\\Temp\\2017\\07\\25\\test.xml'>
2017-09-23 13:14:58.291327 <FileCreatedEvent: src_path='C:\\Temp\\2017\\07\\25\\test.xml'>
2017-09-23 13:14:59.293334 <FileCreatedEvent: src_path='C:\\Temp\\2017\\07\\25\\test.xml'>
2017-09-23 13:14:59.293334 <FileModifiedEvent: src_path='C:\\Temp\\2017\\07\\25\\test.xml'>
いあなたの "LogFile.xml"のコピーは2秒以上話していますか? –
@LaurentLAPORTEいいえ、これらのファイルは100KBのようなものです。 –
@KevinVasko:実行可能な例にするためにコードを変更すると、非常に役に立ちます。 – unutbu