Почему я получаю недопустимую инструкцию 4 при использовании Pathlib в Python? - PullRequest
0 голосов
/ 10 июля 2020

Я работаю над проектом, который наблюдает за моим рабочим столом с помощью Watchdog и отправляет указанный тип файла внешнему API, который выполняет некоторые jiggery-pokery, а затем возвращает его на мой рабочий стол в созданной папке.

Я использую Python 3.8 и Pathlib expanduser, а не старый метод os.path.expanduser, потому что я хочу сделать эту платформенно-зависимую c, а не macOS, только более приятным способом. Вот класс, на котором я сосредотачиваюсь:

class ObserverLoop:
    def __init__(self):
        self.folder = Path("~/Desktop")
        # self.working_path = os.path.abspath(os.path.expanduser("~/" + "/Desktop/"))
        self.working_path = self.folder.expanduser()
        self.event_handler = MonitorFolderChanges(self.working_path)

    def start_loop(self):
        tf.key = secrets.api_key
        observer = Observer()

        observer.schedule(self.event_handler, self.working_path, recursive=False)
        observer.start()

        try:
            while observer.is_alive():
                observer.join(1)
        except KeyboardInterrupt:
            observer.stop()

        observer.join()

Для справки, вот часть используемого здесь класса MonitorFolderChanges:

class MonitorFolderChanges(FileSystemEventHandler):
    def __init__(self, working_path):
        self.path = working_path

    def on_modified(self, event):
        file_exts = [".jpg", ".jpeg" ".png", ".svg", ".gif"]
        images = []

        for file in Path(self.path).glob("**/*"):
            # for file in os.listdir(self.path):
            full_path = PurePath(f"{self.path}/{file}")

            if full_path.suffix.lower() in file_exts: <snip>

Однако пока я могу заставить это работать используя os.path, я получаю недопустимую инструкцию 4 при использовании Pathlib.

Я сузил это - я думаю - до того места, где создается экземпляр observer. Мои навыки Python не являются экспертами, но я не думаю, что у меня что-то не так. Это конфликт со Watchdog, который я могу исправить, или есть еще один ответ, который мне здесь не хватает?

1 Ответ

0 голосов
/ 10 июля 2020

Решение состоит в том, чтобы обновить Watchdog до 0.10.3, поскольку это устраняет проблемы с Pathlib.

...