Я работаю над небольшим инструментом для GameApi. Этот API работает с .log-файлами. Они предоставляются в определенном месте. Я хочу наблюдать за этим местоположением с помощью сторожевого таймера, и он работает нормально, если я использую PatternMatchingEventHandler. Но если я использую RegexMatchingEventHandler, это не удастся. Я хочу использовать Regex, потому что есть много .log-файлов, и я хочу проверить файлы только с сегодняшнего дня.
Расширение: я использую Watchdog с функциями:
on_created
on_deleted
on_moved
on_modified
На этом веб-сайте показан код, который я использую: https://www.thepythoncorner.com/2019/01/how-to-create-a-watchdog-in-python-to-look-for-filesystem-changes/ а>
Я обычно тестировал свою функцию Regex с помощью re. Это абсолютно нормально. Но даже если я попробую запись регулярного выражения: ['\w+.log'], это не сработает.
Я предоставляю вам свое регулярное выражение, чтобы понять, что я хочу сделать:
regexes = ["^Journal\.190901\d{6}\.\d{2}\.log$"]
Я ожидал сообщения каждый раз, когда я изменяю один из моих .log-файлов, но это происходит только в том случае, если я использую PatternMatchingEventHAndle
РЕДАКТИРОВАТЬ: Теперь я представляю вам мой минимальный пример:
import time
from watchdog.observers import Observer
from watchdog.events import RegexMatchingEventHandler
if __name__ == "__main__":
regexes = ["^Journal\.190901\d{6}\.\d{2}\.log$"]
ignore_regexes= []
ignore_directories = False
case_sensitive = True
my_event_handler = RegexMatchingEventHandler(regexes,ignore_regexes,ignore_directories,case_sensitive)
def on_modified(event):
print(f"hey buddy, {event.src_path} has been modified")
my_event_handler.on_modified = on_modified
# Observer
path = "."
go_recursively = True
my_observer = Observer()
my_observer.schedule(my_event_handler, path, recursive=go_recursively)
my_observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
my_observer.stop()
my_observer.join()