, , ,

Python: avisar per correu si una carpeta fa dies que no rep fitxers nous

·

Python: avisar per correu si una carpeta fa dies que no rep fitxers nous

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.