Сторожевой таймер не вызывает событие для шаблона - PullRequest
0 голосов
/ 10 апреля 2020

Я использую сторожевой таймер для наблюдения за каталогом для определенного c шаблона файла.

Имя моего файла выглядит так: myfile-yyyymmdd.csv. Шаблон, который я пытаюсь использовать: myfile - *. Csv

Каталог, в который я помещаю файл: ... / imp / myDir /

Передаваемый watch_directory to FileWatch: ... / 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 голосов
/ 13 апреля 2020

Я смог заставить его работать, переключившись на RegexMatchingExentHandler, как показано в этом посте.

Теперь мне нужно уточнить шаблон регулярных выражений. Когда мой процесс находит файл, он перемещает его в подкаталог и создает файл .trg в том же месте. Создание .trg вызывает другое созданное событие.

Мой шаблон регулярного выражения - '.*myfile.*\.csv'. Я новичок в regex, поэтому я не уверен, что мой шаблон позволяет ему найти myfile_20200413.csv.trg.

Помимо шаблона regex, я бы сказал, что моя первоначальная проблема решена, так как мой код теперь запускает событие на основе шаблона, а также работает для подкаталогов.

...