windows 上的看门狗与 python3.4
Watchdog on windows with python3.4
我正在尝试学习在 windows 上使用看门狗实用程序。
我已经浏览了 google 上提供的基本示例。
我正在尝试编写一个脚本,该脚本将监视给定目录,然后如果创建了具有名为 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 时提供了正确的路径,我不明白为什么我会得到这个。
请帮我看看我遗漏了什么。
错误在这里:
class MyHandler(DirCreatedEvent):
您已经使您的处理程序成为 DirCreatedEvent
的子class。出现错误是因为 DirCreatedEvent
的 __init__
方法,您没有在 MyHandler
class、has one parameter, named src_path
中覆盖它,并且当您使用创建处理程序时MyHandler()
,您没有为此参数传递任何值。
说你的处理程序处理事件比说你的处理程序是事件更正确。所以你需要subclass一个事件处理程序而不是subclassing DirCreatedEvent
,而FileSystemEventHandler
似乎就是你想要的。
因此,将上面的行更改为
class MyHandler(FileSystemEventHandler):
此外,从 watchdog.events
.
导入 FileSystemEventHandler
class
请注意,您的 MyHandler
class 将接收文件创建事件和目录创建事件。忽略它们的最简单方法是将 on_created
方法修改为:
def on_created(self,event):
if isinstance(event, DirCreatedEvent):
self.process(event)
我正在尝试学习在 windows 上使用看门狗实用程序。
我已经浏览了 google 上提供的基本示例。 我正在尝试编写一个脚本,该脚本将监视给定目录,然后如果创建了具有名为 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 时提供了正确的路径,我不明白为什么我会得到这个。
请帮我看看我遗漏了什么。
错误在这里:
class MyHandler(DirCreatedEvent):
您已经使您的处理程序成为 DirCreatedEvent
的子class。出现错误是因为 DirCreatedEvent
的 __init__
方法,您没有在 MyHandler
class、has one parameter, named src_path
中覆盖它,并且当您使用创建处理程序时MyHandler()
,您没有为此参数传递任何值。
说你的处理程序处理事件比说你的处理程序是事件更正确。所以你需要subclass一个事件处理程序而不是subclassing DirCreatedEvent
,而FileSystemEventHandler
似乎就是你想要的。
因此,将上面的行更改为
class MyHandler(FileSystemEventHandler):
此外,从 watchdog.events
.
FileSystemEventHandler
class
请注意,您的 MyHandler
class 将接收文件创建事件和目录创建事件。忽略它们的最简单方法是将 on_created
方法修改为:
def on_created(self,event):
if isinstance(event, DirCreatedEvent):
self.process(event)