Scripting Python sous Linux
2e édition
Développez vos outils système
Éditions-eni
Avant-propos
Partie 1 : Découvrir
Chapitre 1-1
L'environnement de travail
1. Le langage Python en 202317
2. L'environnement de travail18
3. Un terminal et l'interpréteur Python18
4. Un incontournable : Git19
5. La configuration de l'environnement Python19
5.1 Étape 1 : repérez le binaire Python qui vous intéresse20
5.2 Étape 2 : vérifiez la présence de la commande pip qui va avec21
5.3 Étape 3 : vérifiez le module virtualenv21
6. Les autres outils nécessaires24
7. Git un compte, des projets et des sauvegardes24
8. Inscription sur un site et configuration de base26
9. Astuce pour GitHub avec l'authentification SSH27
10. Création d'un projet27
Chapitre 1-2
Le côté fonctionnel classique de Python
1. Introduction33
2. Premiers pas33
2.1 La commande python34
2.2 L'indentation comme syntaxe36
Chapitre 1-3
Quelques instructions de base
1. Introduction43
2. Les opérateurs43
3. Les variables45
4. Quelques instructions de base46
5. Résumé48
Chapitre 1-4
Les types de données en Python
1. Introduction49
2. Les booléens50
2.1 Les opérateurs booléens51
2.2 Les comparaisons logiques52
3. Les numériques53
3.1 Les entiers53
3.2 Les flottants54
3.3 Les opérations55
4. Les alphanumériques57
4.1 Les opérations applicables aux chaînes de caractères59
4.2 Les méthodes applicables aux chaînes de caractères60
4.3 Les modificateurs de chaînes ou « string modifiers »67
5. Les conteneurs ou séquentiels69
5.1 Les listes69
5.2 Les dictionnaires79
5.3 Les tupies85
5.4 Les sets87
5.5 Les frozensets92
6. Autres types de données92
7. Résumé94
Chapitre 1-5
Le langage Python
1. Introduction95
2. La fonction print()95
2.1 Print() formatage C-STYLE96
2.2 Print() formatage chaîne.format()99
2.3 Print() les autres options104
3. Les structures conditionnelles105
3.1 La structure conditionnelle if-elif-else105
3.2 La structure conditionnelle match-case107
4. Les boucles116
4.1 Quelques exemples simples116
4.2 La fonction range()117
4.3 Un « else » dans les boucles119
4.4 sorted() et sort()120
4.5 enumerate()120
4.6 L'affectation parallèle dans les boucles121
4.7 Les dictionnaires et la fonction items()122
4.8 Les listes en compréhension124
5. Les fonctions126
5.1 Les arguments de fonctions avec Python128
5.2 Les fonctions et la portée des variables132
5.3 La notion de passage de paramètres par référence136
6. Les modules et les paquets139
6.1 Les espaces de noms141
6.2 Les paquets ou packages143
6.3 La recherche des modules et paquets147
6.4 Le fichier main .py147
6.5 Exemple avec la gestion d'un restaurant147
7. Les exceptions et la gestion des erreurs158
7.1 Les instructions try ... except ... finally159
7.2 L'instruction assert161
7.3 Déclencher des exceptions162
8. Les entrées/sorties (fichier et autres)164
9. L'instruction With168
10. Exemple de script : hdump169
11. Résumé173
Chapitre 1-6
Le côté Objet de Python
1. Introduction175
2. La POO176
3. L'objet176
4. La classe177
5. Une classe simple177
6. Ajoutons des attributs183
7. Un premier script « objet »185
8. La surcharge de fonction188
9. L'héritage189
10. Exemples de scripts191
10.1 Ajoutons le format HTML198
10.2 Ajoutons la balise <table>201
10.3 Ajoutons le format CSV203
11. Résumé207
Chapitre 1-7
Librairie standard et quelques autres
1. Introduction209
2. La commande pip210
3. Les modules sys et os212
3.1 Le module sys212
3.2 Le module os213
4. Les options de la ligne de commandes215
5. L'interception des signaux218
6. Les fichiers temporaires221
7. Les modules pour les opérations sur les fichiers et les répertoires222
7.1 os.path222
7.2 shutil224
7.3 path.py227
7.4 pathlib227
8. La gestion des processus et sous-processus229
8.1 Subprocess.run()230
8.2 subprocess.popen()232
8.3 Envoyer une commande plus complexe et récupérer la sortie.234
8.4 Multiprocessing - Le parallélisme par processus236
9. Matplotlib242
10. RRDtool245
11. Les expressions régulières (it's a kind of magic)250
11.1 Exemple : récupérer des informations sur l'état du système avec sar (system activity report)257
11.2 Exemple : récupérer des informations sur la mémoire des processus260
12. Les dates et le temps (back to the future)263
12.1 stdlib : calendar, datetime, dateutil, time264
12.2 Arrow267
13. Le module logging268
14. L'accès aux fichiers en mode binaire et le module struct274
15. La génération de données aléatoires276
16. L'accès aux bases de données279
16.1 Les bases de données « SQL »280
16.2 Les bases de données « NoSQL »292
16.3 MongoDB293
16.4 Redis299
17. Les ORM ou Object Relationnal Mapping302
17.1 SQLAlchemy304
17.2 Les autres ORM312
18. Réseau314
18.1 Un serveur web en une ligne de commande315
18.2 Envoyer des mails315
18.3 La vérification des boîtes mails317
18.4 Python et ssh322
18.5 Le transfert de fichier avec ftplib324
18.6 telnet lib327
19. Python et Scapy : le couteau suisse du réseau332
19.1 Analyse d'une connexion FTP334
19.2 Dissection d'un paquet ICMP339
20. Python et le réseau des réseaux : Internet341
20.1 Urllib : requests342
20.2 Beautiful soup347
21. OpenStreetMap et Folium353
22. Outils356
22.1 Pexpect356
22.2 Cmd360
22.3 shlex - Analyse lexicale simple367
22.4 Le module humanfriendly369
23. Résumé371
Chapitre 1-8
Aller plus loin avec le langage Python et la POO
1. Introduction373
2. Quelques concepts objet essentiels373
2.1 Le polymorphisme373
2.2 L'héritage multiple374
2.3 Le singleton377
2.4 La fabrique d'objets379
2.5 La fermeture, ou closure en anglais381
3. Les méthodes spéciales d'instances383
3.1 Les fonctions spéciales classiques384
3.2 La surcharge des opérateurs389
4. Le gestionnaire de contexte (with) enter , exit392
5. Les objets mutables et non mutables394
5.1 Les mutables395
5.2 Les non mutables396
6. Quelques informations supplémentaires sur les classes en Python399
6.1 Les attributs implicites399
6.2 Les fonctions et classes incluses401
6.3 Les attributs statiques et méthodes statiques403
6.4 Les slots pour les performances405
7. Les docstrings - chaînes de documentation406
7.1 Définition406
7.2 Usage407
7.3 Génération de documentation410
7.4 Tests412
8. Les décorateurs413
9. Les dataclasses416
10. La structure conditionnelle match...case et les classes419
11. Les itérateurs, générateurs et autres expressions génératrices426
11.1 Les itérateurs426
11.2 Les générateurs430
12. Gérer ses propres exceptions432
13. Les fonctions natives434
13.1 Les fonctions natives inclassables434
13.2 Les fonctions natives binaires436
13.3 Les fonctions natives de conversion ou de création de type436
13.4 Les fonctions natives sur les itérables437
13.5 Les fonctions natives sur les numériques438
13.6 Les fonctions natives sur les objets439
14. Résumé442
Partie 2 : Pratiquer
Chapitre 2-1
Python et le Cloud
1. Python et l'informatique en Nuage (« Cloud Computing »)443
1.1 Introduction « Bonus » par ChatGPT443
1.2 Introduction445
2. AWS et Python446
3. Les bonnes pratiques avec Amazon Web Services447
3.1 Les prérequis448
3.1.1 Un moyen de paiement448
3.1.2 Git448
3.1.3 De multiples adresses mail448
3.2 Quelques notions et termes449
3.3 Mise en place d'un environnement AWS451
3.4 La console451
3.5 Le VPC par défaut456
3.6 Une première instance457
4. AWS Lambda et Python460
4.1 Définition des autorisations460
4.2 AWS Lambda, premiers pas462
4.3 Insertion de code personnalisé463
4.4 Erreur : que se passe-t-il ?463
4.5 Modification des autorisations464
4.6 Tester à nouveau464
4.7 Pour aller plus loin avec les fonctions Lambda464
5. AWS et Python465
5.1 AWS boto3 Ligne de commande, premiers pas466
5.2 Utilisation des objets de la librairie boto3469
5.3 Conclusion475
Chapitre 2-2
Récupérer des infos sur le système
1. Introduction477
2. psutil : récupérer des informations sur le système478
3. Des informations sur les composants480
3.1 Les processeurs480
3.2 La mémoire482
3.3 Les périphériques de stockage485
3.4 Le réseau486
4. Capteurs et autres informations490
4.1 Les capteurs490
4.2 Autres informations491
4.2.1 Boot time491
4.2.2 Les utilisateurs492
5. Des informations sur les processus492
5.1 Classe Objet et méthodes fournies par psutil492
5.2 Principes d'utilisation496
5.3 Exemples d'utilisation498
6. Résumé502
Chapitre 2-3
Les formats de fichiers populaires
1. Introduction503
2. Le format de fichier « INI »503
3. Comma Separated Values : CSV508
4. MS Office511
5. Le module odfpy513
5.1 Document Texte514
5.2 Document Feuille de calcul517
6. Le module multi-format pyexcel520
7. Le format de fichier JSON523
8. Le format de fichier XML525
9. Le module tarfile pour archives tar531
10. Le format zip534
11. Résumé536
Chapitre 2-4
Manipulation de données
1. Introduction537
2. SQLite en mémoire538
2.1 La mission538
2.2 La récupération des données539
2.3 La définition de la base de données541
2.4 Le script principal543
3. SMS vers HTML (ou autre)546
3.1 Extraction des SMS547
3.2 Transformation des SMS547
3.3 Conversion553
3.4 Script554
4. D'une base à l'autre556
4.1 Le contexte556
4.2 Les schémas557
4.3 Le script principal560
5. Résumé566
Chapitre 2-5
La génération de rapports
1. Introduction569
2. La génération de PDF : Reportlab569
2.1 Hello World en PDF et Reportlab570
2.2 Une table avec Reportlab571
2.3 Encore une table, mais en mieux576
3. Le moteur de patrons Jinja2581
3.1 Jinja et le HTML582
3.2 Ajoutons un peu de CSS (Cascading Style Sheet)587
3.3 Autre cas d'utilisation590
4. Un autre moteur de patron : Pug/Jade595
4.1 Prérequis : installation de Pug597
4.2 Le début du projet597
4.3 Bootstrap, c'est bien598
4.4 Make, c'est bien603
5. Résumé606
Chapitre 2-6
Simulation d'activité
1. Introduction607
2. Description608
3. La structure des données609
4. L'initialisation de la base de données612
4.1 définitions.py612
4.2 populate.py617
5. La connexion à la base de données628
6. Les compteurs629
7. Les commandes clients631
8. La livraison des commandes clients634
9. La facturation des commandes livrées636
10. Le réapprovisionnement du stock638
11. La réception des commandes fournisseurs642
12. Utilisation644
13. Résumé647
Partie 3 : Progresser
Chapitre 3-1
Trucs et astuces
1. Introduction649
2. Adapter le copier/coller d'un tableur pour un wiki650
3. Déballage avec Python (unpacking)652
4. L'underscore et Python654
4.1 Dans l'interpréteur654
4.2 Pour ignorer des valeurs654
4.3 Dans les boucles655
4.4 Pour la séparation des milliers655
4.5 Pour le nommage des variables656
5. Agacer les CPU et mesurer le temps de son code656
6. Créer un décorateur (logger interne)660
7. Bien écrire du code Python (PEP8)661
7.1 Espaces663
7.2 Lignes663
7.3 Tabs et encoding664
7.4 Encoding : UTF8664
7.5 Docstring664
7.6 Nom de variables664
8. Résumé665
Chapitre 3-2
Exemples
1. Introduction667
2. Génération de fichiers et répertoires aléatoire668
3. Graphique d'utilisation d'un serveur sur un mois671
4. psutil analyse des informations des processus676
5. Test continu de débit sur un accès Internet684
6. Évolution de l'espace disque694
7. Exécution de requête SQL sur un serveur distant700
8. Améliorer Apache Index Of712
8.1 WSGI714
8.2 Analyse des besoins716
8.3 Botile717
8.4 Uwsgi - Comment se faire un environnement de test & dev ?718
8.5 Le script startup.py718
8.6 Le script page_html.py720
8.7 Les templates724
8.8 Les fichiers de paramètres727
8.9 La mise en exploitation730
8.10 Le résultat731
9. Résumé732
Chapitre 3-3
Aller plus loin avec Pyihon
1. Introduction733
2. Bottle & Flask734
2.1 Bottle734
2.2 Flask -735
3. Outils735
3.1 Watchdog735
3.2 Paramiko736
3.3 Supervisor737
4. Interfaces utilisateurs739
4.1 Interface graphique : Tkinter739
4.2 Autres interfaces graphiques741
4.3 Interface console : curses742
4.4 Interface console : Urwid742
5. Résumé743
Chapitre 3-4
Pour aller encore plus loin
1. Introduction745
2. Twisted745
3. Brython747
4. Fuse748
5. Ipython et Jupyter749
6. Sphynx752
7. Ansible756
8. Le framework Django759
9. Apache Airflow761
10. Résumé764
Chapitre 3-5
Annexes
1. Ressources Python765
2. Déboguer en Python768
3. Compiler Python depuis les sources771
4. Pourquoi être fan des expressions régulières ?773
5. Les outils utilisés pour cet ouvrage776
6. Création d'une machine virtuelle Debian782
7. Quelques conseils et petites choses à méditer815
8. La dernière section818
Index819