如何正确运行看门狗的RegexMatchingEventHandler?
How to run the RegexMatchingEventHandler of Watchdog correctly?
我正在为游戏开发一个小工具Api。此 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/
我用 re 正常测试了我的 Regex 函数。这绝对没问题。但即使我尝试正则表达式条目:['\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()
这只是事件处理程序返回的路径模式,它从 path
中指定的文件夹的根目录路径开始(在您的示例中为 path = "."
)。
它可以帮助检查返回路径的任何模式,并准确检查您需要什么:
regexes = ['.+'] # will match everything
跟踪当前目录下的文件path = "."
:
# linux (example path : ./Journal[...].log)
regexes = ['^\./Journal\.190901\d{6}\.\d{2}\.log$']
# windows (example path : .\Journal[...].log)
regexes = ["^\.\\Journal\.190901\d{6}\.\d{2}\.log$"]
# both
regexes = ["^\.(/|\\)Journal\.190901\d{6}\.\d{2}\.log$"]
如果您定义了一个名为 logs
的子文件夹,并且您指定的根目录类似于 path = "logs"
# (example path : logs/Journal[...].log or logs\Journal[...].log
regexes = ['^logs(/|\\)logs/Journal\.190901\d{6}\.\d{2}\.log$']
我正在为游戏开发一个小工具Api。此 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/
我用 re 正常测试了我的 Regex 函数。这绝对没问题。但即使我尝试正则表达式条目:['\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()
这只是事件处理程序返回的路径模式,它从 path
中指定的文件夹的根目录路径开始(在您的示例中为 path = "."
)。
它可以帮助检查返回路径的任何模式,并准确检查您需要什么:
regexes = ['.+'] # will match everything
跟踪当前目录下的文件
path = "."
:# linux (example path : ./Journal[...].log) regexes = ['^\./Journal\.190901\d{6}\.\d{2}\.log$'] # windows (example path : .\Journal[...].log) regexes = ["^\.\\Journal\.190901\d{6}\.\d{2}\.log$"] # both regexes = ["^\.(/|\\)Journal\.190901\d{6}\.\d{2}\.log$"]
如果您定义了一个名为
logs
的子文件夹,并且您指定的根目录类似于path = "logs"
# (example path : logs/Journal[...].log or logs\Journal[...].log regexes = ['^logs(/|\\)logs/Journal\.190901\d{6}\.\d{2}\.log$']