Aquesta setmana necessitàvem vigilar una carpeta: concretament, saber si passaven «n» dies sense que hi arribés cap fitxer nou. Per això vaig programar un script senzill de Python que ens envia un correu quan passa. Anem a l’exemple.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import datetime
import glob
import os
import smtplib
now = datetime.datetime.now() # Data i hora actuals
list_of_files = glob.glob('c:/tmp/*') # * vol dir tots; per a un format concret, p. ex. *.csv
latest_file = max(list_of_files, key=os.path.getctime) # Últim fitxer creat a la carpeta
newestFileCreationDate = datetime.datetime.fromtimestamp(os.path.getctime(latest_file)) # Data de creació de l'últim fitxer
dif = now - newestFileCreationDate # Temps entre ara i l'última creació
logFile = "c:/tmp2/log.log" # Fitxer de registre
def checkFolder(dif, now, logFile):
if dif > datetime.timedelta(days=5): # Fa més de 5 dies que no arriba cap fitxer?
HOST = "192.16.0.1" # IP del vostre servidor SMTP
SUBJECT = "Alerta! Almenys 5 dies sense fitxers nous a la carpeta xxxxxxx"
TO = "elvostrecorreu@elvostredomini.com"
FROM = "noreply@elvostredomini.com"
text = "%s - El fitxer més recent de la carpeta té %s d'antiguitat" % (now, dif)
BODY = "\r\n".join((
"From: %s" % FROM,
"To: %s" % TO,
"Subject: %s" % SUBJECT,
"",
text
))
server = smtplib.SMTP(HOST)
server.sendmail(FROM, [TO], BODY.encode("utf-8"))
server.quit()
with open(logFile, "a") as file: # Obrim el registre en mode afegir
file.write("%s - [AVÍS] El fitxer més recent de la carpeta té %s d'antiguitat\n" % (now, dif))
else: # Han passat menys de 5 dies
with open(logFile, "a") as file:
file.write("%s - [OK] El fitxer més recent de la carpeta té %s d'antiguitat\n" % (now, dif))
checkFolder(dif, now, logFile) # Cridem la funció amb els 3 arguments
Per executar-lo cada dia, el podeu programar amb el Programador de tasques de Windows o amb cron a Linux.
Nota: el script original era per a Python 2. Aquesta versió està adaptada a Python 3.
Traducció feta amb l’ajuda d’IA a partir de l’article original.
