Python Watchdog自定义事件处理程序未正确触发

问题描述

我正在使用Python的看门狗模块来侦听某个目录上的已创建事件。我在哪里对新创建的.csv文件进行处理。当我在处理程序中不进行任何测试时,看门狗会为所有粘贴/创建的文件正确触发,但是当我在处理程序中添加代码/逻辑时,其触发次数少于预期(例如52/60文件)。 使用的操作系统:Windows 10,代码应在Windows服务器上运行。 Python版本:3.7.3

代码

import time 
from watchdog.observers import Observer 
from watchdog.events import FileSystemEventHandler
import pandas as pd
import numpy as np
from error_handling import ErrorHandler
import os
from timeloop import Timeloop
from datetime import timedelta
import json 
from fill_data import OnMyWatch2


class OnMyWatch:
    # Set the directory on watch 
    watchDirectory = "."
  
def __init__(self): 
    self.observer1 = Observer()

def run(self):
    self.observer1.schedule(Handler(),self.watchDirectory,recursive = True)
    self.observer1.start()
    try: 
        while True: 
            time.sleep(1) 
    except: 
        self.observer1.stop() 
        print("Observer Stopped") 

    self.observer1.join()

class Handler(FileSystemEventHandler):

@staticmethod
def on_any_event(event):

    if event.is_directory: 
        return None

    elif event.event_type == 'created':
        try:
            
            # Event is created,you can process it Now 
            print("Watchdog received created event - % s." % event.src_path)
            
            pathlower = str(event.src_path).lower()
            if ".csv" in pathlower:
                print("File is csv file")
                # Once any code is added here the problem happens
                # Example:
                # df = pd.read_csv(event.src_path,names= ALL_INI.columnlistbundle.split("|"),sep="|",encoding='latin-1',engine='python')
                # arraySelectedColumnsBundle = ALL_INI.selectedcolumnsbundle.split(",")
                # bundle_df = df[np.array(arraySelectedColumnsBundle)]
            else:
                print("File is not csv file")
        except Exception as e:
            ErrorHandler(0,'In Observer ','-7','Exception ' + str(e),'',1,'')
             

if __name__ == '__main__':
    if os.path.isdir("."):
        watch = OnMyWatch() 
        watch.run()

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)