2015-04-14 2 views
0

Я пытаюсь научиться использовать утилиту сторожевого таймера в окнах.Watchdog на windows с python3.4

Я ознакомился с основными примерами, доступными в 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("[email protected]","[email protected]") 
     message = "New Build has been create with Chnage Number %d" %int(changeNumber[0]) 
     server.sendmail("[email protected]","[email protected]",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' 

я обеспечиваю правильный путь в то время как envoking observer.schedule, я не понимаю, почему я получаю это.

Пожалуйста, помогите мне узнать, чего у меня нет.

ответ

1

Ошибка здесь:

class MyHandler(DirCreatedEvent): 

Вы сделали свой обработчик подкласс DirCreatedEvent. Ошибка возникает из-за того, что метод DirCreatedEvent__init__, который вы не переопределяете в своем классе MyHandler, has one parameter, named src_path, а когда вы создаете обработчик с использованием MyHandler(), вы не передадите ни одного значения для этого параметра.

Было бы правильнее сказать, ваш обработчик обрабатывает события, чем сказать, ваш обработчик это событие. Поэтому вместо подкласса DirCreatedEvent вам нужно подклассифицировать обработчик событий, и FileSystemEventHandler, похоже, тот, который вы хотите.

Таким образом, измените эту строку на

class MyHandler(FileSystemEventHandler): 

Кроме того, импортировать FileSystemEventHandler класс от watchdog.events.

Обратите внимание, что ваш класс MyHandler получит события для создания файла, а также для создания каталога. Самый простой способ, чтобы игнорировать их, чтобы изменить ваш метод on_created к:

def on_created(self,event): 
     if isinstance(event, DirCreatedEvent): 
      self.process(event) 
+0

Это помогло Спасибо, но мне пришлось импортировать, что DirCreatedEvent отдельно для isinstance работать. – LearningNinja