我正在使用看门狗来监视目录中的特定文件模式。
我的文件名如下: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()
以前有人遇到过这个问题吗?如果是这样,您是如何解决的?
答案 0 :(得分:0)
我可以通过切换到RegexMatchingExentHandler来使其正常工作,如图in this post.
现在我需要优化正则表达式模式。当我的进程找到该文件时,它将移动到一个子目录并在相同位置创建一个.trg文件。 .trg的创建正在触发另一个创建的事件。
我的正则表达式模式为'.*myfile.*\.csv'
。我是regex的新手,所以我不确定我的模式允许它找到myfile_20200413.csv.trg。
除了正则表达式模式,我想说我的最初问题已解决,因为我的代码现在基于模式触发事件,并且也可用于子目录。