Сторожевой пес — отслеживает каталог для создания новых файлов, но игнорирует, если файл с тем же именем уже существовал

#python #watchdog #python-watchdog

Вопрос:

Я пытаюсь запустить свою программу для каждого нового файла в папке. Пытаясь реализовать мониторинг с помощью сторожевого пса, я столкнулся со следующей проблемой.
что моя программа делает с каждым новым файлом в папке? Он изменяет его(некоторые параметры в нем)таким образом, что создает новый файл с тем же именем файла. Я хочу, чтобы сторожевой пес определял, когда у меня есть новый файл в каталоге, затем, чтобы запустить мою программу, создайте новый файл с тем же именем(это то, что делает моя программа), но, что самое важное, я не хочу, чтобы моя программа снова запускалась в том же файле. Можно ли это сделать?

Вот MWE, который я уже пробовал.

 from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
from watchdog.events import FileCreatedEvent
from watchdog.events import PatternMatchingEventHandler  

class MyMonitorFolder(PatternMatchingEventHandler):
    patterns = ["*.fits"]
    
    def process(self, event):
        src_path = "A/B/"
        myProgram(src_path)
        
    def on_created(self, event):
        print (str(datetime.now())   " "   str(event))
        self.process(event)
   
if __name__ == "__main__":
    event_handler = MyMonitorFolder()
    observer = Observer()
    observer.schedule(event_handler, path=src_path, recursive=False)
    print("Monitoring started")
    observer.start()
    
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()
 

Ответ №1:

Вы пробовали добавлять другие on_x методы в свой MyMonitorFolder класс?

 class MyMonitorFolder(PatternMatchingEventHandler):
    patterns = ["*.fits"]
    
    def process(self, event):
        src_path = "A/B/"
        myProgram(src_path)
        
    def on_created(self, event):
        print (str(datetime.now())   " "   str(event))
        self.process(event)

    def on_modified(self, event):
        pass

    def on_moved(self, event):
        pass

    def on_deleted(self, event):
        pass

 

Я использую watchdog в Windows, и они, похоже, работают. Какова ваша операционная система?

Комментарии:

1. Спасибо за предложение. Я только что сделал, но он все еще делает то же самое, вероятно, потому, что моя программа все еще генерирует новый файл с тем же именем, и сторожевой пес обнаруживает его как новый файл. Я запускаю его в Linux.