У меня есть сценарий, который смотрит папку для файла, который будет получен. Если файл НЕ принимается за X промежуток времени, я хочу быть предупрежденным, если он получен, я хочу выйти из сценария. Я планирую использовать запланированную задачу Windows для запуска/остановки сценария (потому что я не знаю, как его перерабатывать в Python). Я в настоящее время застрял в попытке выйти из Watchdog/Python КОГДА файл получен (поскольку я хочу только оповещения, если это не так).Как выйти из скрипта Watchdog/Python из функции класса Handler?
В классе Handler я добавил вызов функции quitter, если обнаружено событие event.event_type. Тем не менее, он не выходит и продолжается до достижения значения таймаута.
Вот что я до сих пор:
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
import smtplib
import sys
file_rec = False
class Watcher:
DIRECTORY_TO_WATCH = r"C:\Temp"
def __init__(self):
self.observer = Observer()
def run(self):
t_end = time.time() + 5 * 3 # Configure timeout value
global file_rec
event_handler = Handler()
self.observer.schedule(event_handler, self.DIRECTORY_TO_WATCH, recursive=False)
self.observer.start()
try:
while not file_rec:
if time.time() > t_end: # If timeout reached file not created -- send email
email()
else:
time.sleep(5)
except:
self.observer.stop()
print("Error")
self.observer.join()
class Handler(FileSystemEventHandler):
@staticmethod
def on_any_event(event):
if event.is_directory:
return None
elif event.event_type == 'created':
# File has been received, can now quit watching
global file_rec
file_rec = True
quitter()
if __name__ == '__main__':
def email():
createMsg = "File XXX on Server XXX has not been received, manual intervention required."
sender = '[email protected]'
receiver = '[email protected]'
message = """From: No Reply <[email protected]>
TO: Test User <[email protected]>
Subject: File Not Received
Attention Required: """ + str(createMsg)
mail = smtplib.SMTP('email.mydomain.com', 25)
mail.ehlo()
#mail.starttls()
mail.sendmail(sender, receiver, message)
mail.close()
quitter()
def quitter():
sys.exit()
w = Watcher()
w.run()
Ну, я не думаю, что это довольно, но у меня есть работа. Я добавил глобальную переменную file_received = False. Затем я устанавливаю цикл while: while not file_received (для запуска до тех пор, пока не будет установлено значение True). Затем в функции on_any_event я добавил следующее: elif event.event_type == 'created': # Файл был получен, теперь можно прекратить просмотр global file_rec file_rec = True quitter() –