我遇到的問題是我看到的額外事件並不是我期待的。創建文件夾時用Python看門狗庫查看多個事件
我在看文件夾C:\Users\kvasko\Downloads\data
。如果我複製一個文件夾2017\07\25\LogFile.xml
,我會看到以下3個「已創建」事件,但我希望只看到1.如果我提前創建日期文件夾結構(但是應用程序運行時正在監視文件夾),它只會生成像我期待的一樣事件。我從來沒有得到一個文件夾創建的事件。這就像創建文件夾所產生的事件一樣,但當檢查我的on_created(self,event)
上的實際事件消息時,所有三個外觀事件看起來完全相同。這裏發生了什麼?
這裏是示例輸出和最小示例。
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_created()來on_any_event( )。這是產生的。
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」的副本故事更多的兩秒? –
@LaurentLAPORTE不,這些文件就像100KB一樣。 –
@KevinVasko:如果您修改您的代碼以使其成爲可運行的示例,那對我們將會非常有幫助。 – unutbu