看门狗不触发模式事件

时间:2020-04-10 17:10:49

标签: python python-watchdog

我正在使用看门狗来监视目录中的特定文件模式。

我的文件名如下:myfile-yyyymmdd.csv。我要使用的模式是:myfile-*。csv

我放置文件的目录是:... / imp / myDir /

传递给FileWatch的watch_directory是:... / imp

我正在用recursive = True初始化观察者。

当我使用模式myfile-*。csv时,我的代码不起作用。如果我使用* .csv模式,它确实可以工作。

我不确定我的代码是否存在问题或是否有限制。

这是一个代码段。

class FileWatch(): 
    def __init__(self, watch_directory, patterns, commands, log): 
        self.script_name     = "FileWatch()"
        self.observer        = PollingObserver() 
        self.watch_directory = watch_directory
        self.patterns        = patterns
        self.commands        = commands
        self.log             = log

    def run(self): 
        self.event_handler = Handler(self.log, self.commands, patterns=self.patterns) 
        self.observer.schedule(self.event_handler, self.watch_directory, recursive=True) 
        self.observer.start() 

        try: 
            while True: 
                time.sleep(5) 

        except: 
            self.observer.stop() 
            log.error(logMessage(self.script_name, "Observer Stopped.") )

        self.observer.join() 


class Handler(PatternMatchingEventHandler): 
    def __init__(self, log, commands, patterns=None):
        super(Handler, self).__init__(patterns=patterns)

        self.log = log
        self.commands = commands

    def on_created(self, event): 
        script_name = "Handler - on_created()"

        if event.is_directory:
            return None

        on_event_action("created", event.src_path, self.commands, self.log)

    def on_modified(self, event): 
        script_name = "Handler - on_modified()"

        if event.is_directory:
            return None

        on_event_action("modified", event.src_path, self.commands, self.log)

on_event_action()是一个检查文件大小是否稳定然后移动文件的函数。

我这样呼叫FileWatch:

   watch = FileWatch(watch_directory, patterns, commands, log)
   watch.run() 

以前有人遇到过这个问题吗?如果是这样,您是如何解决的?

1 个答案:

答案 0 :(得分:0)

我可以通过切换到RegexMatchingExentHandler来使其正常工作,如图in this post.

现在我需要优化正则表达式模式。当我的进程找到该文件时,它将移动到一个子目录并在相同位置创建一个.trg文件。 .trg的创建正在触发另一个创建的事件。

我的正则表达式模式为'.*myfile.*\.csv'。我是regex的新手,所以我不确定我的模式允许它找到myfile_20200413.csv.trg。

除了正则表达式模式,我想说我的最初问题已解决,因为我的代码现在基于模式触发事件,并且也可用于子目录。