Каталог мониторинга и чтения. Не могу продолжать читать во время ожидания - PullRequest
0 голосов
/ 11 октября 2019

Я хочу отслеживать каталог и получать изменения в нем. Исследуя, я нашел ReadDirectoryChangesW и смог помочь мне с одним из инструментов, потому что открытие и закрытие файла приводило к обновлению этого CSV-файла, и он мог читать этот файл снова и снова, пока не был создан другой.

    results = win32file.ReadDirectoryChangesW(
                hDir,
                1024,
                True,
                win32con.FILE_NOTIFY_CHANGE_FILE_NAME |
                win32con.FILE_NOTIFY_CHANGE_DIR_NAME |
                win32con.FILE_NOTIFY_CHANGE_ATTRIBUTES |
                win32con.FILE_NOTIFY_CHANGE_SIZE |
                win32con.FILE_NOTIFY_CHANGE_LAST_WRITE |
                win32con.FILE_NOTIFY_CHANGE_SECURITY,
                None,
                None
            )

            for action, file in results:  # Get events that happened
                if action == 1 or 3:  # If file is created or updated
                    full_path = os.path.join(self.directory, file)  # Set full_path to that files path
                if action == 1:
                    self.log.info('CCN File Changed: %s', file)
                data = rd().read_ccn(full_path)  # Read full path
                table_query(data[0], data[1])  # Query dataframe #1: Dataframe #2:Schema #3:Table

Сейчас я пытаюсь сделать то же самое с другим инструментом и другой процедурой чтения, но на этот раз чтение файла не приводит к обновлению для чтения. Мне нужно читать последний файл, который обновляется снова и снова, пока прибор не сгенерирует следующий файл. Дело в том, что прибор генерирует папку для дня, затем генерирует папку для последующих запусков этого дня, а затем в этой папке находятся различные файлы, и я хочу прочитать только один тип файла, поэтому я сделал это.

        while 1:
            # ReadDirectoryChangesW takes a previously-created
            # handle to a directory, a buffer size for results,
            # a flag to indicate whether to watch subtrees and
            # a filter of what changes to notify.

            results = win32file.ReadDirectoryChangesW(
                hDir,
                10024, #Rise if not getting events
                True,
                win32con.FILE_NOTIFY_CHANGE_FILE_NAME |
                win32con.FILE_NOTIFY_CHANGE_DIR_NAME |
                win32con.FILE_NOTIFY_CHANGE_ATTRIBUTES |
                win32con.FILE_NOTIFY_CHANGE_SIZE |
                win32con.FILE_NOTIFY_CHANGE_LAST_WRITE |
                win32con.FILE_NOTIFY_CHANGE_SECURITY,
                None,
                None
            )


            for action, file in results:
                if action == 1 or 3:
                    full_path = os.path.join(self.directory, file)
                if file.endswith('.h5'):
                    print action, file
                    lista.append(file)
                    #data = rd().read_neo(full_path)
                    #table_query(data[0], data[1])
                    #time.sleep(0.5)

            print lista

Это частично работает. Он получает последнее обновление, когда программное обеспечение прибора закрывает файл и создает новый. Но я не могу заставить его продолжать читать последний, пока он не получит обновление las и снова новое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...