python 3.4 - Watchdog on windows with python3.4 -
i trying learn use watchdog utility on windows.
i have gone through basic examples available on google. trying write script monitor given directory , send mail if sub-directory created has file named version.
import time watchdog.observers import observer watchdog.events import dircreatedevent import re import smtplib class myhandler(dircreatedevent): def process(self,event): filetocheck = "version" open(event.src_path+"\\"+filetocheck) 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 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()
the problem whenever running script getting error:
>>> ================================ 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'
i providing proper path while envoking observer.schedule, don't understand why getting this.
please me find out missing.
the error here:
class myhandler(dircreatedevent):
you've made handler subclass of dircreatedevent
. error arising because dircreatedevent
's __init__
method, not overriding in myhandler
class, has 1 parameter, named src_path
, , when create handler using myhandler()
, you're not passing in value parameter.
it more correct handler handles events handler is event. instead of subclassing dircreatedevent
, need subclass event handler, , filesystemeventhandler
seems 1 want.
so, change above line
class myhandler(filesystemeventhandler):
also, import filesystemeventhandler
class watchdog.events
.
note myhandler
class receive events file creation directory creation. easiest way ignore them modify on_created
method to:
def on_created(self,event): if isinstance(event, dircreatedevent): self.process(event)
Comments
Post a Comment