0

我正在尝试学习在 Windows 上使用看门狗实用程序。

我已经浏览了谷歌上可用的基本示例。我正在尝试编写一个脚本,它将监视给定目录,然后如果创建了任何具有名为 version 的文件的子目录,则将发送邮件。

import time
from watchdog.observers import Observer
from watchdog.events import DirCreatedEvent
import re
import smtplib




class MyHandler(DirCreatedEvent):

    def process(self,event):


        fileTocheck = "Version"

        with open(event.src_path+"\\"+fileTocheck) as version:
            chngstring = version.read()
            changeNumber = re.findall(r"\D(\d{5})\D",chngstring)
            if not changeNumber:
                return


        server = smtplib.SMTP('smtp.gmail.com',587)
        server.login("xyz@gmail.com","abc@123")
        message = "New Build has been create with Chnage Number %d"  %int(changeNumber[0])
        server.sendmail("xyz@gmail.com","abc@gmail.com",message)

    def on_created(self,event):
        self.process(event)



if __name__ == '__main__':
    observer = Observer()
    path = "D:\\"
    observer.schedule(MyHandler(),path,recursive=True)
    observer.start()

    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()

    observer.join()

问题是,每当我运行脚本时,我都会收到此错误:

>>> ================================ RESTART   ================================
>>> 
Traceback (most recent call last):
File "C:/Users/Prince/Desktop/KeepLearing/Watchdog.py", line 37, in <module>
observer.schedule(MyHandler(),path,path,recursive=True)
TypeError: __init__() missing 1 required positional argument: 'src_path'

我在调用observer.schedule 时提供了正确的路径,我不明白为什么会这样。

请帮我找出我缺少的东西。

4

1 回答 1

1

错误在这里:

class MyHandler(DirCreatedEvent):

您已将处理程序设为DirCreatedEvent. 之所以会出现错误,是因为您没有在类中覆盖的DirCreatedEvent'方法有一个名为 named 的参数,并且当您使用 创建处理程序时 ,您没有为此参数传递任何值。__init__MyHandlersrc_pathMyHandler()

说你的处理程序处理事件比说你的处理程序一个事件更正确。因此DirCreatedEvent,您需要子类化一个事件处理程序,而不是子类化,这FileSystemEventHandler似乎是您想要的。

因此,将上面的行更改为

class MyHandler(FileSystemEventHandler):

此外,FileSystemEventHandlerwatchdog.events.

请注意,您的MyHandler班级将收到有关文件创建和目录创建的事件。忽略它们的最简单方法是将您的on_created方法修改为:

    def on_created(self,event):
        if isinstance(event, DirCreatedEvent):
            self.process(event)
于 2015-04-14T19:58:57.467 回答