我正在尝试学习在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时提供正确的路径,我不明白为什么我会这样做。
请帮我找出我遗失的内容。
答案 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