Как отслеживать каталог на предмет изменений, связанных с уведомлениями по электронной почте, используя Python - PullRequest
0 голосов
/ 05 февраля 2020

Предисловие: Это мой первый пост о переполнении стека, так что извините, если в какой-то момент я не соблюдаю надлежащие соглашения о том, как правильно задавать вопросы сообществу / ссылки на другие статьи о переполнении стека, где я получил указание.

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

Использование Tim Golden's Python Материал: просмотр каталога изменений (с небольшими изменениями) и публикация под названием Как получить дату последнего изменения файла в Python Я смог использовать Python, чтобы собрать воедино некоторый код, который непрерывно контролирует каталог и успешно возвращает действия, которые произошли с соответствующей отметкой времени, когда каталог последний раз изменялся (отметка времени недостаточно рафинированный, чтобы быть настолько гранулированным, что задает точное время каждого действия, а скорее приписывает время последнего действия в папке всем действиям (что не идеально).

Я застрял на следующих шагах о том, как go об обработке запуск автоматического c уведомления по электронной почте (с использованием MS Outlook), когда происходит какое-либо действие.

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

Любые идеи, предложения или рекомендации будут с благодарностью. Заранее спасибо.

Вот то, что у меня пока есть:

 import os

    import win32file
    import win32con

    from datetime import datetime

    lastmodified= os.stat("generic path of directory").st_mtime

    timestamp = (datetime.fromtimestamp(lastmodified))

    ACTIONS = {
      1 : "FILE_ACTION_ADDED",
      2 : "FILE_ACTION_REMOVED",
      3 : "FILE_ACTION_MODIFIED",
      4 : "FILE_ACTION_RENAMED_OLD_NAME",
      5 : "FILE_ACTION_RENAMED_NEW_NAME",
      8 : "FILE_NOTIFY_CHANGE_SIZE",
      10 : "FILE_NOTIFY_CHANGE_LAST_WRITE",
      20 : "FILE_NOTIFY_CHANGE_CREATION",
      40 : "FILE_NOTIFY_CHANGE_CREATION",
      100 : "FILE_NOTIFY_CHANGE_SECURITY"
    }
    # Thanks to Claudio Grondi for the correct set of numbers
    FILE_LIST_DIRECTORY = 0x0001

    path_to_watch = "generic path of directory"
    hDir = win32file.CreateFile (
      path_to_watch,
      FILE_LIST_DIRECTORY,
      win32con.FILE_SHARE_READ | win32con.FILE_SHARE_WRITE | win32con.FILE_SHARE_DELETE,
      None,
      win32con.OPEN_EXISTING,
      win32con.FILE_FLAG_BACKUP_SEMANTICS,
      None
    )
    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.
      #
      # NB Tim Juchcinski reports that he needed to up
      # the buffer size to be sure of picking up all
      # events when a large number of files were
      # deleted at once.
      #
      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:
        full_filename = os.path.join (path_to_watch, file)
        print (full_filename, ACTIONS.get (action, "Unknown"),timestamp)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...