用python3.4在windows上看门狗

时间:2015-04-14 19:18:04

标签: windows python-3.4 python-watchdog

我正在尝试学习在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时提供正确的路径,我不明白为什么我会这样做。

请帮我找出我遗失的内容。

1 个答案:

答案 0 :(得分:1)

错误在于:

class MyHandler(DirCreatedEvent):

您已将处理程序设为DirCreatedEvent的子类。由于DirCreatedEvent的{​​{1}}方法,您没有覆盖__init__has one parameter, named src_path,以及使用{创建处理程序时出现错误{1}},您没有为此参数传递任何值。

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

所以,将上面一行改为

MyHandler()

另外,从DirCreatedEvent导入class MyHandler(FileSystemEventHandler): 课程。

请注意,您的FileSystemEventHandler类将接收文件创建和目录创建的事件。忽略它们的最简单方法是将watchdog.events方法修改为:

MyHandler