Aller au contenu
Accueil » Automatiser vos tâches récurrentes avec Python

Automatiser vos tâches récurrentes avec Python

    planifier automatiquement les tâches récurrentes avec Python

    Dans cet article nous allons voir comment automatiser avec Python la réalisation de tâches récurrentes. Avec Python, il est facile de programmer la réalisation d’une tâche, de manière répétitive, à un créneau bien spécifique. Nous parcourrons ensemble les fonctions utiles pour faire ce genre de chose.

    Pourquoi automatiser ce genre de tâches ?

    On ne s’en aperçoit pas forcément mais nous réalisons de nombreuses petites tâches, rapides certes mais récurrentes durant notre semaine de travail. Ces tâches n’ont pas vraiment de valeur ajoutée. En automatisant ces tâches, cela nous libère de la charge mentale et nous pouvons nous focaliser sur les tâches importances.

    En plus de vous faire gagner du temps, cela permettra de réduire les erreurs si la tâche est réalisée trop rapidement. Combien de fois nous réalisons une tâche trop rapidement par manque de temps et au final on se rend compte qu’il y a des coquilles dans ce que nous avons fait.

    Enfin, programmer une tâche avec un outil automatique vous assurera que la tâche est bien exécuté, de la même manière, à chaque fois. Par exemple, vous pouvez automatiser la sauvegarde de vos fichiers une fois par semaine.

    Comment automatiser ces tâches récurrentes avec Python ?

    Il existe de plusieurs librairies en python permettant d’automatiser ce genre de tâches. Nous utiliserons la librairie « schedule » dans notre cas. Si vous souhaitez que je teste une autre librairie, n’hésitez pas à me le dire en commentaire. La librairie « schedule » permet de planifier des tâches et de les exécuter à intervalles définis ou à un horaire bien déterminé. Cette librairie a pour avantages d’être simple et facile à utiliser pour nous les humains. Cependant, si vous avez besoin de réaliser des opérations en parallèle, de garder un historique des tâches réalisées, ce n’est pas le bon choix et d’autres librairies plus avancées pourront vous aider comme Advanced Python Scheduler (APScheduler) par exemple.

    Installation de la librairie

    Pour installer la librairie, vous pourrez passer par la commande pip dans votre terminal :

    pip install schedule
    Python

    Ensuite, pour importer la librairie, il faut utiliser la commande suivante :

    import schedule
    Python

    Utilisation de la librairie schedule avec Python

    Pour automatiser une tâche récurrente à une heure donnée, vous pouvez utiliser la fonction « schedule.every() ». Par exemple, pour lancer une sauvegarde de vos fichiers chaque semaine, le vendredi à 17h00, vous pouvez utiliser le code suivant :

    import time
    import schedule
    
    def sauvegarde_fichiers():
      # Ecrivez ici ce que doit faire la fonction ici
      # par exemple, copier les fichiers de tel dossier dans un autre dossier
      # vous pourrez vous aider du module os et shutil pour réaliser ceci.
    
    schedule.every().friday.at('17:00').do(backup_files)
    
    while True:
        schedule.run_pending()
        t = time.localtime()
        print('waiting', time.strftime("%H:%M:%S", t))
        time.sleep(1)
    Python

    Dans cet exemple, la fonction « sauvegarde_fichiers » sera appelée chaque vendredi à 17:00 grâce à la fonction « schedule.every().friday.at() ». Une boucle infinie est créée grâce à la commande « while True: ». A chaque boucle, la fonction « schedule.run_pending() » vérifie toutes les tâches qui sont en suspens. Si la condition est vérifiée, la tâche sera alors exécutée. Pour s’assurer que le script tourne toujours, on affiche l’heure à chaque boucle. Ce n’est pas indispensable mais cela permet de s’assurer que tout fonctionne. Et enfin, la fonction « time.sleep() » permet de mettre en pause le script pendant 1 seconde. Cela évite de consommer trop de ressource pour rien.

    Pour aller plus loin avec la libraire schedule

    D’autres méthodes pour la fonction schedule.every()

    La fonction « schedule.every() » accepte d’autres méthodes pour piloter votre planification. A partir du lancement du script, vous pouvez spécifier votre action sur un intervalle de temps défini. Voici des exemples issus de la documentation.

    import schedule
    import time
    
    def tache_planifiee():
      print("Exécution de la tâche !")
    
    x = 5  # Nombre d'unité de temps pour l'intervalle de répétition.
    schedule.every(x).seconds.do(tache_planifiee)  # Répétera l'action tous les X secondes.
    schedule.every(x).minutes.do(tache_planifiee)  # Répétera l'action tous les X minutes.
    schedule.every(x).hours.do(tache_planifiee)  # Répétera l'action tous les X heures.
    schedule.every(x).days.do(tache_planifiee)  # Répétera l'action tous les X jours.
    schedule.every(x).weeks.do(tache_planifiee)  # Répétera l'action tous les X semaines
    
    while True:
      schedule.run_pending()
      time.sleep(1)
    Python

    Préciser le moment d’exécution avec la méthode « .at »

    Si vous voulez que l’action se passe à un instant bien précis, vous pouvez le spécifier en rajoutant la méthode « .at() ».

    import schedule
    import time
    
    def tache_planifiee():
      print("Exécution de la tâche !")
      
    # Executera la tâche tous les minutes à la 23e seconde
    schedule.every().minute.at(":23").do(tache_planifiee) 
    # Executera la tâche tous les heures à la 42e minutes 
    schedule.every().hour.at(":42").do(tache_planifiee)
    
    # Exécutera la tâche chaque jour à une heure spécifique
    schedule.every().day.at("10:30").do(tache_planifiee)
    schedule.every().day.at("10:30:42").do(tache_planifiee)
    schedule.every().day.at("12:42", "Europe/Amsterdam").do(tache_planifiee) 
    # avec le fuseau horaire pour cette dernière ligne
    
    # et nous avons déjà vu comment effectué une tâche un jour précis de la semaine
    schedule.every().monday.do(tache_planifiee)
    
    while True:
      schedule.run_pending()
      time.sleep(1)
    Python

    Annuler une tâche

    Pour annuler une tâche, il faut utiliser la méthode « schedule.cancel_job(job). Voici un exemple :

    import schedule
    
    def tache_a_realiser():
        print('Hello world')
    
    # On stocke la tâche dans la variable job
    job = schedule.every().day.at('22:30').do(some_task)
    # Et on annule la tâche
    schedule.cancel_job(job)
    Python

    Exécuter une tâche jusqu’à une certaine date

    Au lieu de définir un intervalle, vous pouvez définir la date de fin d’exécution avec la méthode « .until ». Voyez plutôt en exemple :

    import schedule
    from datetime import datetime, timedelta, time
    
    def job():
        print('Boo')
    
    # Exécute la tâche toutes les heures jusqu'à 18h30.
    schedule.every(1).hours.until("18:30").do(job)
    
    # Exécute la tâche toutes les heures jusqu'au 01/01/2050 à 18h33.
    schedule.every(1).hours.until("2050-01-01 18:33").do(job)
    
    # Programme la tâche toutes les heures pendant les 8 prochaines heures.
    schedule.every(1).hours.until(timedelta(hours=8)).do(job)
    
    # Seconde manière de planifier une tâche jusqu'à une heure donnée
    schedule.every(1).hours.until(time(11, 33, 42)).do(job)
    
    # Via le module "datetime", on peut définir une date spécifique en utilisant des variables.
    schedule.every(1).hours.until(datetime(2050, 1, 1, 11, 36, 20)).do(job)
    Python

    Pour aller plus loin, voici le lien vous dirigeant vers la documentation de la librairie.

    Quelques idées de projets à réaliser avec la librairie Schedule

    Sécuriser vos informations

    Comme nous l’avons vu, vous pouvez développez des outils de sauvegarde automatisés. Vous pourrez alors développer des scripts encore plus complexes pour sécuriser davantage votre système.

    Planifier des rappels automatiques par email

    Afin d’être sûr de ne pas oublier quelque chose, vous pouvez planifier des rappels automatiques que vous recevrez par email. Cette technique peut également servir pour envoyer des emails automatiquement aux personnes de votre équipe. Ainsi, en structurant vos données, vous pouvez réaliser un compte-rendu hebdomadaire et l’envoyer pour diffusion de manière 100% automatique !

    Interagir avec les médias sociaux

    Si vous souhaitez envoyer des mises à jour, articles, … sur vos réseaux sociaux à une heure bien précise, vous pouvez les programmer via ce type de librairie.

    Récupérer des données et les mettre à jour

    Si vous avez besoin de récupérer des données d’un fichier, d’un site internet de manière récurrente, vous pouvez très programmer cette tâche et l’automatiser. Grâce à votre outil, vous serez sûr d’avoir toujours des données

    Et maintenant à vous de jouer !

    Nous avons vu dans cet article la base pour planifier des tâches automatiquement. Je vous invite maintenant à réfléchir sur vos actions récurrentes de tous les jours et vous demander si elles peuvent être automatisées. La réponse est très certainement oui dans une certaine mesure. Il faudra certainement organiser un peu les données. Le premier script est le plus dur ! Une fois lancé, vous verrez que cela deviendra de plus en plus en facile.

    N’hésitez pas à me laisser un commentaire, j’y répondrai avec plaisir.
    A bientôt,
    Benjamin

    Si vous avez aimé l'article, vous êtes libres de le partager ! :)

    Laisser un commentaire