Scripts d'automatisation
Tout ce dont vous avez besoin pour ce module, dans un seul document. Cochez au fur et à mesure.
Comment utiliser ce document
- À gauche, une partie à la fois. Cliquez pour changer de partie.
- Les boutons bleus A1 ouvrent une annexe dans le panneau de droite.
- Vos réponses et vos cases cochées sont gardées dans ce navigateur.
Ce qu'il faut savoir avant de commencer
Ce qu'il faut savoir avant de commencer. Lisez-le si vous avez un doute. Environ 10 minutes.
Comment lancer un script Python dans PowerShell ?
Un fichier Python se lance avec la commande python, suivie du nom du fichier.
python bonjour.py
PowerShell cherche le fichier dans le dossier courant. C'est le dossier où vous vous trouvez, écrit avant le > de l'invite.
La commande ls liste son contenu. La commande cd change de dossier.
Un chemin qui ne commence pas par une lettre de disque, comme rapports\liste.csv, part du dossier courant. On l'appelle un chemin relatif.
Comment rattraper une erreur avec try et except ?
Quand une instruction échoue, Python s'arrête et affiche une trace. Avec try et except, on prévoit ce qu'il faut faire à la place.
try:
age = int("douze")
except ValueError:
print("Ce n'est pas un nombre.")
Ici, int("douze") échoue. Python ne plante pas : il affiche le message.
C'est quoi une base SQLite ?
Une base SQLite tient dans un seul fichier, par exemple club.db. Elle contient des tables. Chaque table a des colonnes et des lignes.
En Python, le module sqlite3 ouvre la base et envoie des requêtes SQL.
import sqlite3
con = sqlite3.connect("club.db")
nombre = con.execute("SELECT COUNT(*) FROM membre").fetchone()[0]
con.close()
SELECT COUNT(*) compte les lignes de la table membre.
Comment écrire un fichier CSV en Python ?
Un fichier CSV est un tableau écrit en texte : une ligne par ligne du tableau, les colonnes séparées par un point-virgule.
import csv
with open("liste.csv", "w", newline="", encoding="utf-8") as f:
ecrivain = csv.writer(f, delimiter=";")
ecrivain.writerow(["nom", "age"])
ecrivain.writerow(["Durand", 16])
Le fichier obtenu contient deux lignes : nom;age, puis Durand;16.
Vérifiez-vous
- 1. PowerShell affiche
PS C:\Users\lea\Documents\club>. Vous tapezpython liste.py. Dans quel dossier doit se trouverliste.py? - 2. Que fait ce code :
try: x = 10 / 0puisexcept ZeroDivisionError: x = 0? - 3. Quelle requête SQL compte les lignes de la table
jeu?
Voir les réponses
- Dans
C:\Users\lea\Documents\club, le dossier courant. - La division par zéro échoue. Python ne plante pas :
xprend la valeur 0. SELECT COUNT(*) FROM jeu;
Écrire un script exploitable
COURS-U6-S1-07
Marc Oliveira est le trésorier de MaisonDesJeux, une association de jeux de société. Il tient le fichier des adhérents depuis six ans. Ce fichier a déjà été perdu deux fois.
Aujourd'hui, le fichier est une base de données sur le poste du bureau. Pour la protéger, Marc la copie sur une clé USB, quand il y pense.
Sa dernière copie date de quatre mois. Il ne l'a jamais ouverte.
Bruno, un bénévole, propose d'écrire « un petit programme qui fait ça tout seul ». Marc hésite : « Et s'il plante la nuit, qui me le dira ? »
À la fin de la séance, vous saurez écrire un script qui tourne seul et qui dit s'il a réussi. Et vous saurez prouver qu'une sauvegarde marche.
Le plan de la séance
- Un script qu'on règle sans toucher au code.
- Dire si ça a marché : code de retour et journal.
- Lancer le script à heure fixe.
- Sauvegarder, et prouver qu'on sait restaurer.
La question de départ
Un programme tourne seul à 6 h du matin. Personne n'est devant l'écran. Il échoue. Comment le savoir le lendemain ?
Capsule 1 sur 4Un script qu'on règle sans toucher au code
Bruno veut un programme qui fait une tâche à la place de Marc. Première question : en quoi est-ce différent des programmes que vous avez déjà écrits ?
On l'appelle un SCRIPT. C'est un petit programme qui fait une tâche d'exploitation à la place d'un humain : copier, compter, vérifier, exporter.
Il n'a pas de fenêtre. Il est souvent lancé par une machine, pas par une personne.
Personne n'est donc là pour répondre à un input(). Le script reçoit ses réglages au moment où on le lance. Ces réglages s'appellent des ARGUMENTS : des valeurs écrites sur la ligne de commande, après le nom du script.
Pensez à une machine à laver. Vous choisissez 30 ou 60 degrés à chaque lavage. Vous ne démontez pas la machine pour changer la température.
- On écrit le nom de l'argument avec deux tirets :
--dossier. - On écrit sa valeur juste après, séparée par une espace :
partage. - Dans le script, le module argparse lit la ligne. Il range chaque valeur sous son nom :
args.dossier. - Si un argument obligatoire manque, argparse affiche le mode d'emploi et arrête le script.
parser = argparse.ArgumentParser(description="Inventaire d'un dossier.")
parser.add_argument("--dossier", required=True, help="le dossier à inventorier")
parser.add_argument("--sortie", default="rapports", help="le dossier des rapports")
args = parser.parse_args()
required=True rend l'argument obligatoire. default donne la valeur utilisée quand l'argument est absent.
On le fait ensemble — la sauvegarde de Marc
1. Marc tape python sauvegarde.py --base adherents.db --dest E:\copies. Quel est le script ?
2. Combien d'arguments ?
3. Quelle est la valeur de --dest ?
4. Marc change de clé. Elle apparaît en F:. Que modifie-t-il ?
| Exemple | Pourquoi | |
|---|---|---|
| ✔ | python inventaire.py --dossier partage\public |
Même script, autre dossier : seule la valeur change. |
| ✘ | Modifier dossier = "partage" dans le code avant chaque lancement |
On risque de casser le script. Et une machine ne peut pas modifier le code à votre place. |
| ✘ | Demander le dossier avec input() |
Le script qui tourne seul attend une réponse que personne ne tapera. Il reste bloqué. |
Checkpoint
À l'oral, 3 minutes. Chacun note sa réponse sur sa feuille, puis on corrige.
1. On lance python inventaire.py --dossier public --sortie bilan. Quelle est la valeur de args.sortie ?
2. On lance python inventaire.py --sortie bilan. Que se passe-t-il, avec le code ci-dessus ?
Capsule 2 sur 4Dire si ça a marché : code de retour et journal
Le script se règle sans toucher au code. Reste la question de Marc : s'il échoue la nuit, comment le savoir ?
Le script le dit de deux façons.
D'abord, par son CODE DE RETOUR. C'est un nombre que le script rend au système quand il s'arrête : 0 si tout va bien, un autre nombre sinon. Le nombre dit quelle erreur a eu lieu.
Ensuite, par son JOURNAL. C'est un fichier texte où le script écrit ce qu'il fait, une ligne par événement, avec la date et l'heure.
Pensez au suivi d'un colis. L'appli affiche « Livré » ou « Échec de livraison » : c'est le code. Le détail dit « Absent, avis déposé à 14 h 32 » : c'est le journal.
- Le script se termine par
sys.exit(0)quand tout est fait. - Pour chaque échec prévu, il rend un code choisi par l'équipe : 3 pour « dossier introuvable », par exemple. Les codes sont écrits dans les règles de l'équipe.
- Python rend 1 tout seul quand le script plante. argparse rend 2 quand les arguments sont faux.
- Le code est lu par une machine : PowerShell le range dans
$LASTEXITCODE, l'ordonnanceur le garde aussi. - Le journal est lu par un humain. Le module logging écrit chaque ligne avec son heure et son niveau : INFO pour une étape normale, ERROR pour un échec.
logging.info("Début de l'inventaire de %s", args.dossier)
if not dossier.is_dir():
logging.error("Dossier introuvable : %s", dossier)
sys.exit(3)
On le fait ensemble — la clé USB oubliée
1. Marc lance la sauvegarde, mais la clé n'est pas branchée. Le script peut-il rendre 0 ?
2. Les règles de l'équipe disent 3 pour « dossier introuvable ». Quelle ligne termine le script ?
3. Que doit contenir le journal ?
4. Le script plante sur une erreur que personne n'a prévue. Quel code rend-il ?
| Exemple | Pourquoi | |
|---|---|---|
| ✔ | sys.exit(0) à la dernière ligne, quand tout est fait |
Le code dit clairement : réussi. |
| ✘ | print("Erreur !"), puis le script se termine normalement |
Le code vaut 0. La machine croit que tout va bien. Personne n'est prévenu. |
| ✘ | Une ligne de journal Erreur sans date ni cause |
On ne sait ni quand ni pourquoi. Le journal ne sert à rien. |
Checkpoint
À l'oral, 3 minutes. Chacun note sa réponse sur sa feuille, puis on corrige.
1. Après un lancement, $LASTEXITCODE vaut 2. Quelle est la cause la plus probable ?
2. Pourquoi écrire dans un fichier journal plutôt qu'à l'écran avec print ?
Capsule 3 sur 4Lancer le script à heure fixe
Le script dit maintenant s'il a réussi. Mais Marc doit encore penser à le lancer. Comment le faire partir tout seul ?
On confie ce travail à un ORDONNANCEUR. C'est un programme du système qui lance des tâches à l'heure prévue.
Sur Windows, c'est le Planificateur de tâches. Sur Linux, c'est cron.
C'est comme programmer le réveil de votre téléphone. Vous le réglez une fois. Il sonne chaque matin, même si vous dormez.
Une tâche planifiée a deux parties : le déclencheur, qui dit quand, et l'action, qui dit quoi lancer.
- Testez le script à la main d'abord. Il doit marcher et rendre 0.
- Réglez le déclencheur : une fois, chaque jour, chaque lundi, le 1er du mois.
- Réglez l'action : le programme
python.exe, les arguments, et le dossier de départ. Les chemins relatifs du script partent de ce dossier. - Vérifiez une vraie exécution : l'heure de la dernière exécution, son code de retour, et la ligne du journal à cette heure.
On le fait ensemble — l'inventaire du lundi
1. Marc veut l'inventaire du partage chaque lundi à 8 h. Quel est le déclencheur ?
2. Quel programme l'action lance-t-elle ?
3. Quel dossier de départ ?
4. Mardi, le Planificateur affiche 3 comme dernier résultat. Que faites-vous ?
| Exemple | Pourquoi | |
|---|---|---|
| ✔ | Lancer la tâche une fois à la main, puis lire son résultat et le journal | On voit une vraie exécution avant de partir. |
| ✘ | « La tâche est créée, donc ça marche. » | Créer n'est pas exécuter. Seule une exécution réelle, avec le code 0, le prouve. |
| ✘ | Planifier la tâche à 3 h sur un poste éteint la nuit | Un ordinateur éteint ne lance rien. Choisissez une heure où le poste est allumé. |
Checkpoint
À l'oral, 3 minutes. Chacun note sa réponse sur sa feuille, puis on corrige.
1. Le Planificateur affiche 0 comme dernier résultat, à 6 h 00 ce matin. Qu'est-ce que ça prouve ?
2. Quelle erreur fait écrire le journal dans un autre dossier que prévu ?
Capsule 4 sur 4Sauvegarder, et prouver qu'on sait restaurer
On sait lancer un script seul, et savoir s'il a réussi. Revenons à la clé USB de Marc. Ses copies sont-elles vraiment utiles ?
Une SAUVEGARDE est une copie datée des données, rangée ailleurs, pour les retrouver après une perte. La RESTAURATION, c'est reconstruire les données à partir de cette copie.
Pour comparer deux bases, on calcule leur EMPREINTE. C'est un code court calculé à partir de tout le contenu. Si une seule lettre change, l'empreinte change.
Vos photos sont sauvegardées sur un cloud. Le jour où le téléphone tombe dans l'eau, vous les récupérez sur un nouveau téléphone. Mais vous ne savez si ça marche qu'en essayant.
Instant histoire — 1998 : Toy Story 2 presque effacé
En 1998, chez Pixar, une commande d'effacement est lancée par erreur. Elle supprime la plupart des fichiers du film Toy Story 2.
Les sauvegardes ne marchaient plus depuis des semaines. Personne ne l'avait vu.
Le film est sauvé par une copie qu'une responsable gardait chez elle, sur son ordinateur.
Pixar avait des sauvegardes. Qu'est-ce qui a manqué ?
- Exportez la base dans un fichier daté :
sauvegarde_2026-10-01.sql, par exemple. - Rangez la copie ailleurs : un autre disque, un autre lieu. Jamais seulement à côté de la base.
- Restaurez dans une base neuve, jamais sur la base en service.
- Comparez avant et après : le nombre de lignes de chaque table, et l'empreinte. Tout doit être identique.
On le fait ensemble — la clé USB de Marc
1. La copie de Marc a quatre mois. Est-ce une sauvegarde ?
2. Où la restaurer pour la tester ?
3. Comment savoir si elle est complète ?
4. La copie a moins de lignes que la base actuelle. Pourquoi ?
| Exemple | Pourquoi | |
|---|---|---|
| ✔ | Chaque mois, restaurer la dernière copie dans un dossier de test et comparer | La sauvegarde est prouvée à chaque fois. |
| ✘ | Ranger la sauvegarde sur le même disque que la base | Si le disque lâche, la base et sa copie disparaissent ensemble. |
| ✘ | « Le fichier de sauvegarde pèse 180 Ko, donc il est bon. » | La taille ne dit rien du contenu. Seules la restauration et la comparaison le prouvent. |
Checkpoint
À l'oral, 3 minutes. Chacun note sa réponse sur sa feuille, puis on corrige.
1. Pourquoi restaurer dans une base neuve, et pas sur la base en service ?
2. Avant et après la restauration, les tables ont le même nombre de lignes, mais l'empreinte d'une table est différente. La restauration est-elle prouvée ?
Ce qu'on retient
Si vous ne devez retenir que trois choses
1. Un script se règle par ses arguments et rend un code de retour : 0 si tout va bien, un autre nombre sinon.
2. Un script qui tourne seul écrit un journal daté. On vérifie toujours une vraie exécution : son heure, son code, sa ligne de journal.
3. Une sauvegarde n'est prouvée que restaurée dans une base neuve, puis comparée à l'original.
Revenons à Marc. Un script exporte maintenant la base le 1er de chaque mois, à 6 h, lancé par le Planificateur. S'il échoue, il rend un code d'erreur et l'écrit dans son journal.
Et chaque mois, quelqu'un restaure la dernière copie dans un dossier de test. Marc ne se demande plus si ses copies marchent : il le voit.
Écrire un script exploitable
COURS-U6-S1-07
L'essentiel
- Script : un petit programme sans fenêtre, qui fait une tâche d'exploitation, souvent lancé par une machine.
- Arguments : les réglages donnés sur la ligne de commande. On change la valeur, jamais le code.
- Code de retour : 0 si tout va bien, un autre nombre sinon. Il est lu par une machine.
- Journal : une ligne datée par événement, lue par un humain.
- Planification : l'ordonnanceur lance le script à l'heure prévue et garde son dernier code de retour.
- Sauvegarde : prouvée seulement après une restauration dans une base neuve et une comparaison.
Les mots à connaître
| Mot | En clair |
|---|---|
| Argument | Une valeur donnée au script sur la ligne de commande : --dossier partage. |
| argparse | Le module Python qui lit les arguments et affiche le mode d'emploi. |
| Code de retour | Le nombre rendu par le script quand il s'arrête. $LASTEXITCODE dans PowerShell. |
| logging | Le module Python qui écrit le journal, avec l'heure et le niveau. |
| Ordonnanceur | Le programme qui lance les tâches à l'heure prévue : Planificateur de tâches, cron. |
| Dossier de départ | Le dossier d'où partent les chemins relatifs quand la tâche se lance. |
| Empreinte | Un code court calculé sur tout le contenu. Un seul changement, et elle change. |
Les codes à connaître
| Code | Qui le rend | Sens |
|---|---|---|
| 0 | le script, avec sys.exit(0) |
tout va bien |
| 1 | Python, tout seul | le script a planté |
| 2 | argparse, tout seul | arguments faux ou manquants |
| 3 et plus | le script, avec sys.exit(…) |
un échec prévu, selon les règles de l'équipe |
La méthode : rendre un script prêt à tourner seul
- Remplacez les valeurs écrites dans le code par des arguments.
- Prévoyez chaque échec : une ligne ERROR dans le journal, puis
sys.exitavec le bon code. - Terminez par
sys.exit(0). - Testez à la main, puis planifiez, avec le dossier de départ.
- Vérifiez une vraie exécution : heure, code, journal.
Un exemple concret
Le Planificateur affiche 3 comme dernier résultat de l'inventaire du lundi.
| Étape | Ce qu'on fait | Résultat |
|---|---|---|
| 1 | Lire l'heure de la dernière exécution | Lundi, 8 h 00 : la tâche a bien tourné. |
| 2 | Lire le code : 3 | Un échec prévu, pas un plantage. |
| 3 | Lire le journal à 8 h 00 | ERROR Dossier introuvable : partage |
| 4 | Chercher la cause | Le dossier de départ manque dans l'action. |
Conclusion : on corrige l'action de la tâche, on la relance à la main, et on vérifie que le code revient à 0.
Les pièges
- ✘ Afficher « Erreur » sans
sys.exit→ le code vaut 0, personne n'est prévenu. - ✘ Oublier le dossier de départ → le script cherche ses fichiers ailleurs.
- ✘ Croire une tâche créée → vérifier une exécution réelle.
- ✘ Sauvegarder sans jamais restaurer → restaurer dans une base neuve et comparer.
Script d'inventaire, journal et restauration
LABO-U6-S1-07
Contexte — Marc Oliveira, le trésorier de MaisonDesJeux, veut deux choses. Savoir chaque semaine ce que contient le dossier partagé de l'association. Et ne plus jamais perdre le fichier des adhérents.
Bruno Sanchez, bénévole, a écrit un début de script d'inventaire. Il marche, mais seulement sur un dossier écrit dans le code, et il ne dit jamais s'il a échoué. Vous le rendez prêt à tourner seul, vous le planifiez, puis vous prouvez qu'on sait restaurer la base.
Règle IA de la séance
Scénario 1 : pas d'IA pendant ce labo. Vous avez les annexes, l'aide --help et la recherche web classique.
Bloqué ? Relisez l'annexe citée dans l'étape, puis demandez au formateur.
À la fin de ce labo, vous saurez régler un script par ses arguments. Il écrira un journal et rendra un code de retour. Vous saurez aussi le planifier et prouver une restauration.
Comment ça se valide — à chaque point de contrôle, vous montrez votre résultat au formateur. Il valide, puis vous passez à la suite.
Les mots de la séance
| Mot | Ce que ça veut dire |
|---|---|
| Script | Un petit programme sans fenêtre, qui fait une tâche à la place d'un humain. |
| Argument | Une valeur donnée au script sur la ligne de commande : --dossier partage. |
| Code de retour | Le nombre rendu par le script quand il s'arrête. 0 veut dire « réussi ». |
| Journal | Le fichier texte où le script note ce qu'il fait, avec la date et l'heure. |
| Planificateur de tâches | Le programme de Windows qui lance une tâche à l'heure prévue. |
| Inventaire | La liste de tous les fichiers d'un dossier, avec leur taille. |
| Empreinte | Un code court calculé sur tout le contenu d'une table. Un seul changement, et elle change. |
Ce dont vous avez besoin
- Votre poste Windows, avec Python, VS Code et PowerShell.
- Annexe : le dossier de travail et son mode d'emploi. Il se télécharge depuis l'annexe , dans le fichier
A1_mdj_scripts.zip. - Annexe : un extrait de la documentation de Python.
- Annexe : les règles d'exploitation des scripts de MaisonDesJeux.
- Annexe : un extrait de la documentation du Planificateur de tâches.
En binôme — le pilote tape, le lecteur lit les consignes et les annexes à voix haute, et vérifie chaque résultat. On inverse à la partie C.
Le plan du labo
| Partie | Étapes | Ce que vous obtenez | Temps |
|---|---|---|---|
| A — Un script réglé par ses arguments | 1 à 6 | l'inventaire de n'importe quel dossier, sans toucher au code | 30 min |
| B — Un journal et des codes de retour | 7 à 12 | un script qui dit s'il a réussi, et pourquoi il a échoué | 30 min |
| C — Planifier le script | 13 à 18 | un inventaire lancé par Windows, et son résultat lu | 30 min |
| D — Sauvegarder et restaurer la base | 19 à 24 | une restauration prouvée par la comparaison | 30 min |
PARTIE A — Un script réglé par ses arguments
Étapes 1 à 6, environ 30 min. À la fin, le script fait l'inventaire du dossier que vous lui donnez sur la ligne de commande.
Besoin d'un rappel ? Revoir le cours : « Un script qu'on règle sans toucher au code ».
Installer le dossier de travail
- Téléchargez
A1_mdj_scripts.zipdepuis l'annexe . - Faites un clic droit sur le fichier, puis « Extraire tout ». Avec « Parcourir », choisissez votre dossier « Documents ».
Vous devez voir : un dossier mdj-scripts dans « Documents ». Il contient adherents.db, inventaire.py, restaurer.py, verifier_base.py et le dossier partage.
Si vous voyez un dossier mdj-scripts dans un autre dossier mdj-scripts : utilisez celui qui contient directement inventaire.py.
Ouvrir le dossier dans VS Code
- Ouvrez VS Code. Menu « Fichier », puis « Ouvrir le dossier ». Choisissez
Documents\mdj-scripts. - Ouvrez un terminal : menu « Terminal », puis « Nouveau terminal ». Tapez :
ls
Vous devez voir : cinq éléments, dont inventaire.py et partage. Le terminal est déjà dans le dossier mdj-scripts : c'est votre dossier courant.
Lancer la version de départ
- Ouvrez
inventaire.pyet lisez-le. Son code est aussi dans l'annexe . - Dans le terminal, tapez :
python inventaire.py
Vous devez voir : deux lignes. L'heure dans le nom du rapport sera la vôtre.
20 fichiers, 51600 octets
Rapport : rapports\inventaire_2026-10-07_140512.csv
Si vous voyez « python n'est pas reconnu » : tapez py à la place de python, ici et dans toute la suite.
Pourquoi ? Marc veut aussi l'inventaire du seul dossier partage\public. Avec cette version, que faut-il faire à chaque fois ?
Votre réponse :
Trouver dans la doc
Vous allez remplacer le dossier écrit dans le code par un argument. Le module qui lit les arguments s'appelle argparse.
- Ouvrez l'annexe , partie « Lire les arguments : argparse ».
- Trouvez le réglage qui rend un argument obligatoire. Notez-le ici :
- Trouvez le réglage qui donne une valeur quand l'argument est absent. Notez-le ici :
Vous devez avoir : deux mots écrits entre les parenthèses de add_argument. Vous les utilisez à l'étape suivante.
Ajouter les arguments
- Tout en haut de
inventaire.py, ajoutez la ligneimport argparse, au-dessus deimport csv. - Remplacez les deux lignes
dossier = Path("partage")etsortie = Path("rapports")par ce bloc :
parser = argparse.ArgumentParser(description="Inventaire d'un dossier.")
parser.add_argument("--dossier", required=True, help="le dossier à inventorier")
parser.add_argument("--sortie", default="rapports", help="le dossier des rapports")
args = parser.parse_args()
dossier = Path(args.dossier)
sortie = Path(args.sortie)
- Enregistrez avec Ctrl+S.
Vous devez voir : aucun point rouge sur l'onglet de inventaire.py dans VS Code. Le fichier est enregistré.
Tester les arguments
- Tapez, une commande après l'autre :
python inventaire.py --dossier partage
python inventaire.py --dossier partage\animations
python inventaire.py --help
Vous devez voir : 20 fichiers et 51600 octets pour la première commande. 9 fichiers et 24300 octets pour la deuxième. Pour la troisième, le mode d'emploi :
usage: inventaire.py [-h] --dossier DOSSIER [--sortie SORTIE]
Inventaire d'un dossier.
options:
-h, --help show this help message and exit
--dossier DOSSIER le dossier à inventorier
--sortie SORTIE le dossier des rapports
Pourquoi ? Dans le mode d'emploi, --sortie SORTIE est entre crochets, mais pas --dossier DOSSIER. Que veulent dire ces crochets ?
Votre réponse :
POINT DE CONTRÔLE A
- Montrez au formateur l'inventaire de
partage\animations, lancé avec l'argument--dossier. - Le formateur a validé. Passez à la partie B.
PARTIE B — Un journal et des codes de retour
Étapes 7 à 12, environ 30 min. À la fin, le script rend un code qui dit s'il a réussi, et il note chaque lancement dans son journal.
Besoin d'un rappel ? Revoir le cours : « Dire si ça a marché : code de retour et journal ».
Lire le code de retour
Après chaque commande, PowerShell range le code de retour dans la variable $LASTEXITCODE.
- Tapez ces deux lignes :
python inventaire.py --dossier partage
$LASTEXITCODE
Vous devez voir : l'inventaire, puis 0.
- Lancez le script sans argument, puis lisez le code :
python inventaire.py
$LASTEXITCODE
Vous devez voir :
usage: inventaire.py [-h] --dossier DOSSIER [--sortie SORTIE]
inventaire.py: error: the following arguments are required: --dossier
2
Découvrir un échec silencieux
- Lancez l'inventaire d'un dossier qui n'existe pas. Attention au « s » en trop :
python inventaire.py --dossier partages
$LASTEXITCODE
Vous devez voir : 0 fichiers, 0 octets, un rapport vide, puis 0.
Le dossier n'existe pas, et pourtant le script dit « réussi ». Un Planificateur ne verrait aucun problème.
Lire les règles de l'équipe
- Ouvrez l'annexe , partie « Les codes de retour ».
- Notez le code prévu quand le dossier à traiter est introuvable :
Vous devez voir : un tableau de six codes, de 0 à 5, avec pour chacun son sens et qui le rend.
Pourquoi ? Pourquoi l'équipe ne choisit-elle pas les codes 1 et 2 pour ses propres échecs ?
Votre réponse :
Rendre le bon code
- Tout en haut du fichier, ajoutez
import sys. - Juste sous la ligne
sortie = Path(args.sortie), ajoutez ce bloc :
if not dossier.is_dir():
print("Erreur : dossier introuvable :", dossier)
sys.exit(3)
- Tout à la fin du fichier, ajoutez une dernière ligne, sans retrait :
sys.exit(0). - Enregistrez, puis relancez :
python inventaire.py --dossier partages
$LASTEXITCODE
Vous devez voir : Erreur : dossier introuvable : partages, puis 3. Aucun rapport n'est créé.
Ajouter le journal
- Tout en haut du fichier, ajoutez
import logging. - Juste sous la ligne
args = parser.parse_args(), ajoutez ce bloc :
logging.basicConfig(filename="inventaire.log", level=logging.INFO,
format="%(asctime)s %(levelname)s %(message)s", encoding="utf-8")
logging.info("Début de l'inventaire de %s", args.dossier)
- Dans le bloc
if not dossier.is_dir():, ajoutez cette ligne juste avant leprint:
logging.error("Dossier introuvable : %s", dossier)
- Juste avant la ligne
print(len(fichiers), ..., ajoutez :
logging.info("Inventaire terminé : %d fichiers, %d octets", len(fichiers), total)
- Enregistrez.
Vous devez voir : le code complet de cette étape est dans l'annexe , partie « Le script à la fin de l'étape 11 ». Comparez le vôtre avec lui, ligne par ligne.
Remplir la grille des trois cas
- Lancez ces trois commandes. Après chacune, tapez
$LASTEXITCODEet notez le code :
python inventaire.py --dossier partage
python inventaire.py
python inventaire.py --dossier partages
- Affichez le journal. L'option
-Encoding UTF8garde les accents :
Get-Content inventaire.log -Encoding UTF8
- Remplissez la grille. La première ligne est faite pour vous montrer.
| Cas | Code de retour | Dernière ligne ajoutée au journal, ou « rien » |
|---|---|---|
--dossier partage |
0 | INFO Inventaire terminé : 20 fichiers, 51600 octets |
| Cas | Code de retour | Dernière ligne ajoutée au journal, ou « rien » |
|---|---|---|
| sans argument | ||
--dossier partages |
Vous devez voir : trois codes différents dans votre grille, et une seule ligne ERROR dans le journal.
Pourquoi ? Pour le lancement sans argument, aucune ligne n'est ajoutée au journal. Regardez l'ordre des lignes du script. Pourquoi ?
Votre réponse :
POINT DE CONTRÔLE B
- Montrez au formateur votre grille remplie et votre fichier
inventaire.log. - Le formateur a validé. Passez à la partie C. Inversez les rôles : le lecteur devient pilote.
PARTIE C — Planifier le script
Étapes 13 à 18, environ 30 min. À la fin, Windows lance l'inventaire tout seul, et vous lisez le résultat de chaque exécution.
Besoin d'un rappel ? Revoir le cours : « Lancer le script à heure fixe ».
Trouver dans la doc
- Ouvrez l'annexe , partie « Lire le résultat d'une tâche ».
- Notez la commande qui affiche le résultat de la dernière exécution :
- Notez le nom de la colonne qui contient le code de retour :
Vous devez avoir : une commande qui commence par Get-, et un nom de colonne en anglais.
Préparer l'action
L'action dit quoi lancer : le programme, ses arguments, et le dossier de départ.
- Dans le terminal de VS Code, toujours dans
mdj-scripts, tapez ces trois lignes :
$dossier = (Get-Location).Path
$python = (Get-Command python).Source
$action = New-ScheduledTaskAction -Execute $python -Argument "inventaire.py --dossier partage" -WorkingDirectory $dossier
- Vérifiez les deux chemins en tapant
$dossier, puis$python.
Vous devez voir : le chemin de votre dossier mdj-scripts, puis un chemin qui finit par python.exe.
Si vous voyez une erreur rouge sur Get-Command python : remplacez python par py dans la deuxième ligne, puis retapez la troisième.
Ces variables vivent dans ce terminal. Si vous le fermez, retapez les trois lignes.
Créer la tâche planifiée
Le déclencheur dit quand lancer. Ici, dans une minute, puis toutes les deux minutes pendant deux heures.
- Tapez ces deux lignes :
$declencheur = New-ScheduledTaskTrigger -Once -At (Get-Date).AddMinutes(1) -RepetitionInterval (New-TimeSpan -Minutes 2) -RepetitionDuration (New-TimeSpan -Hours 2)
Register-ScheduledTask -TaskName "MDJ-inventaire" -Action $action -Trigger $declencheur
Vous devez voir : un petit tableau avec MDJ-inventaire dans la colonne TaskName et Ready dans la colonne State.
Si vous voyez « Accès refusé » : le poste bloque la création de tâches. Appelez le formateur.
Lancer la tâche et lire son résultat
- Lancez la tâche tout de suite, sans attendre le déclencheur :
Start-ScheduledTask -TaskName "MDJ-inventaire"
- Attendez dix secondes. Puis tapez :
Get-ScheduledTaskInfo -TaskName "MDJ-inventaire" | Select-Object LastRunTime, LastTaskResult, NextRunTime
Vous devez voir : l'heure de l'exécution dans LastRunTime, et 0 dans LastTaskResult.
Si vous voyez 267009 : la tâche tourne encore. Attendez dix secondes et recommencez. 267011 veut dire qu'elle n'a pas encore tourné.
- Affichez les dernières lignes du journal :
Get-Content inventaire.log -Encoding UTF8 -Tail 2
Vous devez voir : deux lignes INFO, à l'heure de LastRunTime.
Pourquoi ? Le Planificateur dit déjà 0. Pourquoi lire aussi le journal ?
Votre réponse :
Voir une exécution automatique
- Notez l'heure de
NextRunTime: - Quand cette heure est passée, retapez la commande
Get-ScheduledTaskInfode l'étape 16.
Vous devez voir : LastRunTime a changé et vaut l'heure notée. LastTaskResult vaut 0. Personne n'a lancé le script : c'est Windows.
- Comptez les rapports produits :
(Get-ChildItem rapports).Count
Vous devez voir : un rapport de plus qu'à l'étape 16.
Casser la tâche, puis la supprimer
- Changez l'action : la tâche va chercher un dossier qui n'existe pas.
$action2 = New-ScheduledTaskAction -Execute $python -Argument "inventaire.py --dossier partages" -WorkingDirectory $dossier
Set-ScheduledTask -TaskName "MDJ-inventaire" -Action $action2
Start-ScheduledTask -TaskName "MDJ-inventaire"
- Attendez dix secondes, puis relisez le résultat avec la commande de l'étape 16.
Vous devez voir : 3 dans LastTaskResult. Le journal se termine par ERROR Dossier introuvable : partages.
- Supprimez la tâche :
Unregister-ScheduledTask -TaskName "MDJ-inventaire" -Confirm:$false
Vous devez voir : aucun message. La commande Get-ScheduledTask -TaskName "MDJ-inventaire" affiche maintenant une erreur : la tâche n'existe plus.
POINT DE CONTRÔLE C
- Montrez au formateur les lignes du journal écrites par la tâche, avec leurs heures, et la ligne ERROR de l'étape 18.
- Le formateur a validé. Passez à la partie D.
PARTIE D — Sauvegarder et restaurer la base
Étapes 19 à 24, environ 30 min. À la fin, vous avez prouvé qu'une sauvegarde de la base des adhérents se restaure à l'identique.
Besoin d'un rappel ? Revoir le cours : « Sauvegarder, et prouver qu'on sait restaurer ».
Noter l'état de la base
L'outil verifier_base.py compte les lignes de chaque table et calcule leur empreinte. Son mode d'emploi est dans l'annexe .
- Tapez :
python verifier_base.py adherents.db
Vous devez voir : Intégrité : ok, puis une ligne par table : adherent, jeu, emprunt.
- Recopiez les nombres de lignes et les empreintes dans la colonne « Avant » de la grille de l'étape 24.
Écrire le script de sauvegarde
- Dans VS Code, créez un fichier
sauvegarde.pydansmdj-scripts. Écrivez :
"""Sauvegarde de la base des adhérents dans un fichier .sql daté."""
import sqlite3
from datetime import date
con = sqlite3.connect("adherents.db")
nom = "sauvegarde_" + date.today().isoformat() + ".sql"
with open(nom, "w", encoding="utf-8") as f:
for ligne in con.iterdump():
f.write(ligne + "\n")
con.close()
print("Sauvegarde écrite :", nom)
- Enregistrez, puis lancez
python sauvegarde.py.
Vous devez voir : Sauvegarde écrite : sauvegarde_ suivi de la date du jour et de .sql.
- Affichez les trois premières lignes du fichier :
Get-Content sauvegarde_*.sql -Encoding UTF8 -TotalCount 3
Vous devez voir : BEGIN TRANSACTION;, puis CREATE TABLE adherent (. La sauvegarde est une suite de commandes SQL qui reconstruisent la base.
Ranger la copie ailleurs
- Créez un dossier de sauvegardes, à côté de
mdj-scripts, puis déplacez-y la copie :
New-Item -ItemType Directory ..\sauvegardes-mdj
Move-Item sauvegarde_*.sql ..\sauvegardes-mdj
Vous devez voir : ls ..\sauvegardes-mdj affiche votre fichier sauvegarde_….sql.
Pourquoi ? Dans une vraie installation, où faudrait-il ranger ce dossier ? Et pourquoi pas sur le même disque que la base ?
Votre réponse :
Simuler la perte de la base
- Supprimez la base :
Remove-Item adherents.db
- Vérifiez qu'elle a disparu :
python verifier_base.py adherents.db
$LASTEXITCODE
Vous devez voir : Base introuvable : adherents.db, puis 3.
Restaurer la base
L'outil restaurer.py reconstruit une base à partir d'une sauvegarde. Il refuse de remplacer une base qui existe.
- Mettez le chemin de la copie dans une variable, puis restaurez :
$copie = Get-ChildItem ..\sauvegardes-mdj\sauvegarde_*.sql | Select-Object -First 1
python restaurer.py $copie.FullName adherents.db
Vous devez voir : Base restaurée : adherents.db.
Prouver la restauration
- Relancez
python verifier_base.py adherents.db. - Remplissez la colonne « Après ». Comparez chaque ligne avec « Avant ».
| Table | Avant : lignes et empreinte | Après : lignes et empreinte | Identique ? |
|---|---|---|---|
| adherent | |||
| jeu | |||
| emprunt |
Vous devez voir : les trois lignes identiques. Si une seule diffère, la restauration n'est pas prouvée.
Pourquoi ? Pourquoi comparer les empreintes, et pas seulement vérifier que adherents.db existe de nouveau ?
Votre réponse :
POINT DE CONTRÔLE D
- Montrez au formateur votre grille « Avant » et « Après », avec les empreintes identiques.
- Le formateur a validé. Le labo est terminé.
POUR ALLER PLUS LOIN
15 min, si vous avez fini avant la fin de la séance.
1. Le code 5 : droits insuffisants. L'annexe prévoit le code 5 quand le script ne peut pas écrire.
- Dans
inventaire.py, entourez la création du dossier et l'écriture du rapport avectry:etexcept PermissionError:. Dans leexcept, écrivez une ligne ERROR dans le journal, puissys.exit(5). - Interdisez-vous l'écriture dans
rapports, puis lancez l'inventaire :
icacls rapports /deny "${env:USERNAME}:(W)"
python inventaire.py --dossier partage
$LASTEXITCODE
Vous devez voir : 5, et une ligne ERROR dans le journal.
- Rendez-vous le droit d'écrire :
icacls rapports /remove:d "$env:USERNAME"
2. Le piège de la base absente. Créez un dossier vide essai, copiez-y sauvegarde.py, et lancez-le depuis ce dossier.
- Regardez ce que contient
essaiaprès le lancement, puis lancezpython ..\verifier_base.py adherents.dbdansessai. - Notez ce que vous constatez :
CE QU'IL FAUT RETENIR
- Un script se règle par ses arguments. Il se termine par
sys.exitavec un code : 0 si tout va bien, le code prévu par l'équipe sinon. - Une tâche planifiée se vérifie sur une vraie exécution :
LastTaskResultet la ligne du journal à la même heure. - Une restauration se prouve en comparant les lignes et les empreintes, avant et après, dans une base reconstruite.
Export mensuel automatique
TP-U6-S1-04
Contexte — Marc Oliveira, le trésorier de MaisonDesJeux, vous appelle : « Le 1er de chaque mois, je veux un export daté du fichier des adhérents. Un fichier que j'ouvre dans mon tableur. »
« Et si ça rate, je veux être prévenu tout de suite. Pas le découvrir trois mois après. »
Vous écrivez le script d'export, vous traitez ses échecs, vous le planifiez. Puis vous écrivez la procédure pour reconstruire le fichier des adhérents à partir d'un export. Un autre étudiant la testera.
Règle IA de la séance
Scénario 1 : pas d'IA pendant ce TP. Vous avez les annexes, l'aide --help et la recherche web classique.
Notez dans votre mini-rapport chaque coup de pouce demandé.
CE QUE VOUS RENDEZ
| Ce que vous rendez | Format | Nom du fichier |
|---|---|---|
Le dossier export-mensuel, complet, avec export.log, exports et boite_moliveira |
ZIP | NOM_Prenom_TP-U6-S1-04_script.zip |
| Le mini-rapport | NOM_Prenom_TP-U6-S1-04_rapport.pdf |
Le mini-rapport : deux pages au maximum. Il prouve que c'est votre travail : chaque rubrique s'appuie sur ce qui s'est passé sur votre poste. Un texte général, sans traces de votre poste, ne compte pas.
- Mes captures : les quatre captures demandées dans les parties A, B et D. Prenez-les en plein écran : l'heure de la barre des tâches doit se voir. Une ligne de légende sous chacune.
- Mon journal : faites ce parcours, dans l'ordre. Un lancement normal. Puis
--base absente.db. Puis--espace-min 99999999. Puis un lancement normal. Recopiez les lignes que ces quatre lancements ont ajoutées àexport.log. Notez à côté la valeur de$LASTEXITCODEde chaque lancement. - Mes trois erreurs : trois erreurs que vous avez vraiment rencontrées pendant le TP, dans le tableau ci-dessous.
- Une ligne de mon code : recopiez la ligne de votre script qui décide de rendre le code 4. Expliquez-la avec vos mots, en trois lignes au maximum.
- Ma procédure de restauration, testée : votre procédure, faite avec le modèle de l'annexe , avec la partie « Test » remplie par votre testeur.
- Ce qui manque : ce qui ne marche pas, ce que vous avez essayé, et les coups de pouce utilisés.
Voici une ligne d'exemple pour la rubrique 3 :
| Le message d'erreur, recopié | Ce qui le causait | Ce que j'ai changé |
|---|---|---|
NameError: name 'sys' is not defined |
J'appelais sys.exit(3) sans avoir écrit import sys. |
J'ai ajouté import sys en haut du script. |
Vos trois erreurs :
| Le message d'erreur, recopié | Ce qui le causait | Ce que j'ai changé |
|---|---|---|
Comment ce sera évalué
| Critère | Ce qui est attendu |
|---|---|
| La chaîne automatique | L'export daté est planifié, deux exécutions réelles sont prouvées, chaque échec prévient Marc, et la procédure de restauration a été testée par quelqu'un d'autre. |
| Le script | Les arguments, les codes de retour de l'annexe , le journal, et un code que vous savez expliquer ligne par ligne. |
| Présentation | Document daté, nommé selon la convention, titres clairs, tableaux lisibles |
Sans traces de votre poste, c'est-à-dire sans vos captures, votre journal ni vos erreurs, les deux premiers critères ne dépassent pas « Fragile ».
Et à l'oral — le formateur pointera une ligne de votre script ou de votre mini-rapport. Il vous demandera de l'expliquer, ou de refaire devant lui une erreur que vous racontez.
Ce dont vous disposez
- Votre poste Windows, avec Python, VS Code et PowerShell.
- Annexe : le point de départ du TP. Le dossier se télécharge depuis l'annexe , dans le fichier
A5_export_mensuel.zip. - Annexe : la demande de Marc Oliveira et le format d'export.
- Annexe : les règles d'exploitation des scripts de MaisonDesJeux.
- Annexe : un extrait de la documentation de Python.
- Annexe : le mécanisme d'alerte du plateau.
- Annexe : un extrait de la documentation du Planificateur de tâches.
- Annexe : le modèle de procédure de restauration.
Le plan du TP
| Partie | Ce que vous obtenez | Temps conseillé |
|---|---|---|
| A — Le script d'export | un export daté, au bon format | 40 min |
| B — Les cas d'échec | un code et une ligne de journal pour chaque échec | 40 min |
| C — L'alerte | Marc prévenu à chaque échec | 20 min |
| D — Planifier et restaurer | deux exécutions prouvées, une procédure testée | 30 min |
| Mini-rapport | 20 min |
Gardez 20 minutes à la fin pour le mini-rapport.
Bloqué ? Demandez un coup de pouce. Ça ne fait pas perdre de points.
PARTIE A — Le script d'export
Environ 40 min.
Le script lit la table des adhérents et l'écrit dans un fichier CSV daté, au format demandé par Marc.
Besoin d'un rappel ? Revoir le cours : « Un script qu'on règle sans toucher au code ».
- 1. Téléchargez
A5_export_mensuel.zipdepuis l'annexe . Extrayez-le dans « Documents » : « Extraire tout », puis « Parcourir ». Ouvrez le dossierDocuments\export-mensueldans VS Code. - 2. Lancez
python verifier_base.py adherents.db. Notez le nombre de lignes et l'empreinte de la tableadherent: - 3. Lisez l'annexe . Remplissez la grille du format. Pour l'encodage, cherchez dans l'annexe le nom exact que Python lui donne.
| Ce qui est demandé | Votre réponse |
|---|---|
| Nom du fichier, pour un export d'octobre 2026 | |
| Dossier où il est écrit | |
| Première ligne du fichier | |
| Séparateur | |
| Ordre des lignes | |
| Encodage, écrit comme Python l'attend |
- 4. Dans
export_mensuel.py, écrivez les deux arguments demandés par l'annexe , avec leur valeur par défaut. - 5. Ouvrez le journal
export.logcomme le demande l'annexe . Écrivez une ligne INFO au début de l'export. - 6. Écrivez la lecture de la table
adherent, triée parid, puis l'écriture du fichier CSV. - 7. Terminez par une ligne INFO qui donne le nom du fichier et le nombre d'adhérents, puis par
sys.exit(0). - 8. Lancez le script, puis vérifiez le code et le nombre de lignes du fichier :
python export_mensuel.py
$LASTEXITCODE
(Get-Content exports\adherents_*.csv -Encoding UTF8).Count
Ce qui doit marcher à la fin de la partie A
- Le fichier
exports\adherents_AAAA-MM.csvexiste, avec l'année et le mois du jour. - Il compte 341 lignes : l'en-tête et une ligne par adhérent.
- Ouvert dans un tableur, il affiche les accents correctement, par exemple le prénom « Léa ».
- Le code de retour vaut 0, et le journal contient deux lignes INFO pour ce lancement.
- Capture 1 ajoutée au mini-rapport : le terminal avec le code
0et le nombre de lignes.
POINT DE CONTRÔLE A
- Le formateur a vu l'export ouvert dans un tableur. Passez à la partie B.
PARTIE B — Les cas d'échec
Environ 40 min.
Marc a cité trois échecs possibles : la base est indisponible, le disque est plein, le script n'a pas le droit d'écrire. Pour chacun, le script écrit une ligne ERROR dans le journal, puis s'arrête avec le code prévu par l'annexe .
Besoin d'un rappel ? Revoir le cours : « Dire si ça a marché : code de retour et journal ».
- 1. Lisez l'annexe , partie « Les codes de retour ». Notez les codes des trois échecs dans la grille de l'étape 5, colonne « Code attendu ».
- 2. La base indisponible. Avant d'ouvrir la base, vérifiez qu'elle existe. Lisez d'abord l'encadré « Attention » de la partie sqlite3 de l'annexe . Testez avec
--base absente.db, puis vérifiez qu'aucun fichierabsente.dbn'a été créé :
Test-Path absente.db
- 3. Le disque plein. Ajoutez l'argument
--espace-mindemandé par l'annexe . Avant d'écrire, mesurez l'espace libre du disque avec la fonction de l'annexe . Pour provoquer l'échec sans remplir le disque, demandez un minimum énorme :--espace-min 99999999. - 4. Les droits insuffisants. Rattrapez l'erreur de Python qui survient quand l'écriture est interdite. Pour provoquer l'échec, retirez-vous le droit d'écrire dans
exports, lancez le script, puis rendez-vous le droit :
icacls exports /deny "${env:USERNAME}:(OI)(CI)(W)"
python export_mensuel.py
$LASTEXITCODE
icacls exports /remove:d "$env:USERNAME"
- 5. Remplissez la grille. La première ligne est faite pour vous montrer.
| Cas | Comment je le provoque | Code attendu | Code obtenu | Ligne ERROR du journal |
|---|---|---|---|---|
| Base indisponible | --base absente.db |
3 | 3 | ERROR Base introuvable : absente.db |
| Cas | Comment je le provoque | Code attendu | Code obtenu | Ligne ERROR du journal |
|---|---|---|---|---|
| Disque plein | ||||
| Droits insuffisants |
- 6. Relancez un export normal. Il doit toujours rendre 0.
Ce qui doit marcher à la fin de la partie B
- Chaque échec rend le code de l'annexe , jamais 0 ni 1.
- Chaque échec ajoute une ligne ERROR qui dit la cause.
Test-Path absente.dbrépondFalse.- L'export normal rend toujours 0.
- Capture 2 ajoutée au mini-rapport : le terminal avec les trois codes d'échec.
POINT DE CONTRÔLE B
- Le formateur a vu votre grille remplie et les trois lignes ERROR du journal. Passez à la partie C.
PARTIE C — L'alerte
Environ 20 min.
Un code et une ligne de journal, c'est pour le technicien. Marc, lui, doit recevoir un message qu'il comprend, avec des mots simples.
- 1. Lisez l'annexe . Notez le nom de la fonction à appeler et ce qu'elle attend :
- 2. Écrivez, pour chaque échec, le sujet et le message que Marc recevra. La première ligne est faite pour vous montrer.
| Cas | Sujet | Message pour Marc |
|---|---|---|
| Base indisponible | Échec de l'export mensuel | Le fichier des adhérents n'a pas été exporté : la base adherents.db est introuvable. Prévenez le prestataire. |
| Cas | Sujet | Message pour Marc |
|---|---|---|
| Disque plein | ||
| Droits insuffisants |
- 3. Dans votre script, appelez la fonction d'alerte dans chaque cas d'échec, avant
sys.exit. - 4. Provoquez les trois échecs, puis un export normal. Ouvrez le dossier
boite_moliveira.
Ce qui doit marcher à la fin de la partie C
- Chaque échec dépose un message dans
boite_moliveira, avec le bon sujet et la cause. - Un export normal ne dépose aucun message.
- Le message se comprend sans connaître l'informatique.
POINT DE CONTRÔLE C
- Le formateur a lu un de vos messages d'alerte. Passez à la partie D.
PARTIE D — Planifier et restaurer
Environ 30 min.
Le script doit tourner seul le 1er de chaque mois. On le teste d'abord toutes les deux minutes, pour voir deux exécutions réelles. Puis on écrit la procédure de restauration, et quelqu'un d'autre la teste.
Besoin d'un rappel ? Revoir le cours : « Lancer le script à heure fixe ».
- 1. Avec l'annexe , créez la tâche
MDJ-export-mensuel. Pour le test, elle se lance toutes les deux minutes. N'oubliez pas le dossier de départ. - 2. Attendez deux exécutions automatiques. Lisez le résultat de la tâche et les dernières lignes du journal.
- 3. Capture 3 ajoutée au mini-rapport : le résultat de la tâche et les deux lignes « Export réussi » du journal, à deux minutes d'écart.
- 4. Avec l'annexe , partie « Passer au déclencheur mensuel », réglez la tâche sur le 1er de chaque mois, à 6 h. Capture 4 : l'onglet « Déclencheurs » de la tâche.
- 5. Avec le modèle de l'annexe , écrivez la procédure qui reconstruit le fichier des adhérents à partir du dernier export. L'outil
restaurer_adherents.pyest décrit dans l'annexe . - 6. Échangez votre procédure avec un autre binôme. Suivez la sienne sur votre poste, dans un dossier neuf, sans lui poser de question. Remplissez la partie « Test » de sa procédure.
- 7. À la fin de la séance, supprimez la tâche : les postes de la salle sont partagés.
Ce qui doit marcher à la fin de la partie D
- Le résultat de la tâche vaut 0, et le journal montre deux exécutions automatiques à deux minutes d'écart.
- Le déclencheur mensuel est réglé : le 1er du mois, à 6 h.
- Votre procédure a été suivie par quelqu'un d'autre, sans votre aide. Il a obtenu le même nombre de lignes et la même empreinte que celles notées à l'étape 2 de la partie A.
POINT DE CONTRÔLE D
- Le formateur a vu la partie « Test » de votre procédure, remplie par votre testeur. Rédigez votre mini-rapport.
Tous les documents du module
Cliquez sur une annexe pour l'ouvrir dans le panneau de droite. Elle reste ouverte pendant que vous lisez.