จัดเก็บข้อมูลการบันทึกเป็นตัวแปรเพื่อใช้ในการแจ้งเตือนข้อความอีเมล

ฉันใช้เวลาเพียงสองสามสัปดาห์ในการเรียนรู้ Python โดยไม่มีพื้นฐานการเขียนโปรแกรมมาก่อน ดังนั้นฉันต้องขออภัยในความไม่รู้ของฉัน..

ฉันกำลังพยายามใช้โมดูลรวมกันเพื่อตรวจสอบโฟลเดอร์สำหรับไฟล์ใหม่ (สุนัขเฝ้าบ้าน) แจ้งเตือนเหตุการณ์ใด ๆ (โมดูลการบันทึก) จากนั้นส่งการแจ้งเตือนไปยังอีเมลของฉัน (smtplib)

ฉันพบตัวอย่างที่ดีจริงๆ ที่นี่: จะรันฟังก์ชันได้อย่างไรเมื่อมีการเปลี่ยนแปลงใดๆ ใน dir ด้วย 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()

person Nick Biolo    schedule 19.01.2017    source แหล่งที่มา
comment
ฉันหมายความว่าถ้าคุณสามารถเข้าสู่ระบบได้ คุณจะรู้ว่าคุณกำลังเข้าสู่ระบบอะไรถูกต้อง เพียงแค่นำตัวแปรนั้นออกแล้วส่งทางไปรษณีย์?   -  person Bobby    schedule 19.01.2017


คำตอบ (2)


สิ่งที่คุณต้องการคือ 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()
person Shane    schedule 20.01.2017
comment
ขอบคุณสำหรับการตอบกลับ ฉันสามารถทำให้มันใช้งานได้กับตัวอย่างที่ฉันพบที่นี่: michaelcho.me/article/. - person Nick Biolo; 25.01.2017

สามารถรับตัวอย่างการทำงานได้ที่นี่และปรับแต่งตามความต้องการของฉัน: https://www.michaelcho.me/article/using-pythons-watchdog-to-monitor-changes-to-a-directory

person Nick Biolo    schedule 25.01.2017