
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
PythonEnsuite, pour importer la librairie, il faut utiliser la commande suivante :
import schedule
PythonUtilisation 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)
PythonDans 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)
PythonPré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)
PythonAnnuler 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)
PythonExé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)
PythonPour 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