Как проверить определенный файл и запустить другой скрипт Python

Я хочу использовать сторожевой таймер для мониторинга определенного имени файла в каталоге для запуска определенного скрипта Python.

Например:

Во-первых, я хочу использовать сторожевой таймер для мониторинга всех файлов .avi.

Если имя файла .avi в пути (C:/User/AAxxx/video/): ABxxx_11.avi, я хочу запустить ABxxx_11.py

Если имя файла .avi в пути (C:/User/BBxxx/video/): CDxxx_22.avi, я хочу запустить CDxxx_22.py

Если имя файла .avi в пути (C:/User/CCxxx/video/): EFxxx_33.avi, я хочу запустить EFxxx_33.py

И я хочу передать каталог подпапок папки AAxxx, BBxxx и CCxxx. Я хочу сосредоточиться только на файле .avi.

Теперь у меня есть только сторожевой таймер для файла монитора .avi и запуск только одного скрипта python. пожалуйста, смотрите, как показано ниже.

from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
from watchdog.events import PatternMatchingEventHandler
                    
class Watcher:
    def __init__(self, path, filename):
        self.observer = Observer()
        self.path = path
        self.filename = filename

    def run(self):
        event_handler = Handler(self.filename)
        self.observer.schedule(event_handler, self.path, recursive=True)
        self.observer.start()
        try:
            while True:
                time.sleep(1)
        except:
            self.observer.stop()
            print("Error")

        self.observer.join()


class Handler(PatternMatchingEventHandler):
    def __init__(self, filename):
        super(Handler, self).__init__(
            patterns=[filename],
            ignore_patterns=["*.tmp"],
            ignore_directories=True,
            case_sensitive=False,
        )

    def on_any_event(self, event):
        print(
            "[{}] noticed: [{}] on: [{}] ".format(
                time.asctime(), event.event_type, event.src_path
            )
        )
        #process1 = subprocess.Popen(["python", "ABxxx_11.py"])


if __name__ == "__main__":
    path = "C:/Users/xxx/AAxxx/video/"
    filename = "*.avi"

    w = Watcher(path, filename)
    w.run()

У вас есть некоторый контекст, написанный выше, но могу ли я узнать, в чем ваш вопрос?

Sin Han Jinn 21.11.2022 07:07

@Han Спасибо за ответ. Я хочу знать. Как настроить мой код для использования сторожевого таймера для мониторинга определенного имени файла в каталоге для запуска определенного скрипта Python.

Kukkik 21.11.2022 07:13

обратитесь к моему ответу ниже

Sin Han Jinn 21.11.2022 07:44
14 Задание: Типы данных и структуры данных Python для DevOps
14 Задание: Типы данных и структуры данных Python для DevOps
проверить тип данных используемой переменной, мы можем просто написать: your_variable=100
Python PyPDF2 - запись метаданных PDF
Python PyPDF2 - запись метаданных PDF
Python скрипт, который будет записывать метаданные в PDF файл, для этого мы будем использовать PDF ридер из библиотеки PyPDF2 . PyPDF2 - это...
Переменные, типы данных и операторы в Python
Переменные, типы данных и операторы в Python
В Python переменные используются как место для хранения значений. Пример переменной формы:
Почему Python - идеальный выбор для проекта AI и ML
Почему Python - идеальный выбор для проекта AI и ML
Блог, которым поделился Harikrishna Kundariya в нашем сообществе Developer Nation Community.
Как автоматически добавлять котировки в заголовки запросов с помощью PyCharm
Как автоматически добавлять котировки в заголовки запросов с помощью PyCharm
Как автоматически добавлять котировки в заголовки запросов с помощью PyCharm
Анализ продукта магазина на Tokopedia
Анализ продукта магазина на Tokopedia
Tokopedia - это место, где продавцы могут продавать свои товары. Товар должен быть размещен на витрине, чтобы покупателям было легче найти товар...
0
3
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler


class Watcher:
    DIRECTORY_TO_WATCH = "C:/Users/test/AAxxx/video"

    def __init__(self):
        self.observer = Observer()

    def run(self):
        event_handler = Handler()
        self.observer.schedule(event_handler, self.DIRECTORY_TO_WATCH, recursive=True)
        self.observer.start()
        try:
            while True:
                time.sleep(5)
        except:
            self.observer.stop()
            print "Error"

        self.observer.join()


class Handler(FileSystemEventHandler):

    @staticmethod
    def on_any_event(event):
        if event.is_directory:
            return None

        elif event.event_type == 'created':
            # Take any action here when a file is first created.
            print "Received created event - %s." % event.src_path
            if ".avi" in event.src_path:
                print "run this file ->" + str(event.src_path.rsplit('\\')[1].split('.')[0]) + ".py"

        elif event.event_type == 'modified':
            # Taken any action here when a file is modified.
            print "Received modified event - %s." % event.src_path
            if ".avi" in event.src_path:
                print "run this file ->" + str(event.src_path.rsplit('\\')[1].split('.')[0]) + ".py"


if __name__ == '__main__':
    w = Watcher()
    w.run()

когда я создаю новый файл .avi в пути, выводится следующее:

Спасибо большое за вашу поддержку. Это работает, когда я использую полное имя файла avi, но если я хочу использовать имя файла в вашем коде, например, глобальный путь (Расширение: если «AB * _11.avi» в event.src_path :) Как я могу изменить этот код, поддержите что угодно имя в символе (*).

Kukkik 21.11.2022 08:06

Есть простой способ. Если вы уверены, что это шаблон, просто используйте -> if "AB" in event.src_path and "_11.avi" in event.src_path: Более элегантный способ — использовать регулярные выражения для проверки.

Sin Han Jinn 21.11.2022 08:19

Другие вопросы по теме