2017-01-19 1 views
0

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

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

Я нашел очень хороший пример здесь: How to run an function when anything changes in a dir with Python Watchdog?

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

В любом случае, это то, что у меня есть. Любая помощь приветствуется. Тем временем я продолжу Google.

import sys 
import time 
import logging 
from watchdog.observers import Observer 
from watchdog.events import LoggingEventHandler 
import smtplib 

class Event(LoggingEventHandler): 
    def on_any_event(self, event): 
     logMsg = logging.basicConfig(level=logging.INFO, 
         format='%(asctime)s - %(message)s', 
         datefmt='%Y-%m-%d %H:%M:%S') 

     sender = '[email protected]' 
     receiver = '[email protected]' 
     message = """From: No Reply <[email protected]> 
     TO: Test User <[email protected]> 
     Subject: Folder Modify Detected 

     The following change was detected: """ + str(logMsg) 

     mail = smtplib.SMTP('mailServer.myDomain.com', 25) 
     mail.ehlo() 
     mail.starttls() 
     mail.sendmail(sender, receiver, message) 
     mail.close() 

if __name__ == "__main__": 

    path = sys.argv[1] if len(sys.argv) > 1 else '.' 
    event_handler = Event() 
    observer = Observer() 
    observer.schedule(event_handler, path, recursive=False) 
    observer.start() 
    try: 
     while True: 
      time.sleep(1) 
    except KeyboardInterrupt: 
     observer.stop() 
    observer.join() 
+0

Я имею в виду, если вы можете войти, вы знаете, что вы регистрируете право. Просто возьмите эту переменную и отправьте ее по почте? – Bobby

ответ

0

Что вам нужно, это SMTPHandler, так что каждый раз при изменении папки (создается новый журнал), отправляется сообщение электронной почты.

import logging 
from watchdog.observers import Observer 
from watchdog.events import LoggingEventHandler 

class Event(LoggingEventHandler): 
    def on_any_event(self, event): 
     # do stuff 
     pass 

if __name__ == "__main__": 
    root = logging.getLogger() 
    root.setLevel(logging.INFO) 
    formatter = logging.Formatter('%(asctime)s - %(message)s', 
            '%Y-%m-%d %H:%M:%S') 
    root.setFormatter(formatter) 

    mail_handler = logging.handlers.SMTPHandler(mailhost='mailserver', 
               fromaddr='[email protected]', 
               toaddrs=['[email protected]'], 
               subject='The log', 
               credentials=('user','pwd'), 
               secure=None) 
    mail_handler.setLevel(logging.INFO) 
    mail_handler.setFormatter(formatter) 
    root.addHandler(mail_handler) # Add this handler to root logger 

    path = sys.argv[1] if len(sys.argv) > 1 else '.' 
    event_handler = Event() 
    observer = Observer() 
    observer.schedule(event_handler, path, recursive=False) 
    observer.start() 
    try: 
     while True: 
      time.sleep(1) 
    except KeyboardInterrupt: 
     observer.stop() 
    observer.join() 
+0

Спасибо за ответы. Я смог получить эту работу с приведенным здесь примером: https://www.michaelcho.me/article/using-pythons-watchdog-to-monitor-changes-to-a-directory. –

Смежные вопросы