Blog ENI : Toute la veille numérique !
🐠 -25€ dès 75€ 
+ 7 jours d'accès à la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. Scripting Python sous Linux
  3. Pour aller encore plus loin
Extrait - Scripting Python sous Linux Développez vos outils système (2e édition)
Extraits du livre
Scripting Python sous Linux Développez vos outils système (2e édition)
2 avis
Revenir à la page d'achat du livre

Pour aller encore plus loin

Introduction

Ce dernier chapitre permet d’évoquer des produits conçus ou tournant autour du langage Python.

Il s’agit généralement de modules ou de produits complets que l’auteur n’a pas encore eu le loisir d’étudier (malheureusement, les journées ne font que 24 h).

C’est pour cette raison que nous ne ferons que survoler ces merveilleux outils sans donner d’exemple ou de procédure, mais juste quelques conseils ou points d’entrées.

Twisted

Premier avertissement : faites des recherches sur Google avec le mot "python" précédent le terme "twisted", car celui-ci signifie en français « tordu, entortillé, mélangé, voire même bizarre ». Sinon, on peut se retrouver, sans le faire exprès, à surfer sur des sites normalement refusés par le contrôle parental.

À part ce petit inconvénient, il s’agit d’une magnifique librairie pour construire des applications sur quasiment tous les protocoles réseau.

Le principe de cette librairie est que tout est basé sur les événements, d’où la définition de "event driven networking library".

Sur la page du site de twisted se trouvent un certain nombre d’exemples absolument bluffants ; ainsi, un simple "echo server" tient en quelques lignes.

Après avoir installé la librairie twisted (pip install twisted), il suffit de copier/coller l’exemple suivant et de lancer le script avec Python.

Sur une autre session, il faut lancer "telnet localhost 1234" pour se connecter sur l’echo server qui répétera tout ce que vous taperez au clavier.

Voici le script en question :

# fichier : twisted/t1.py 
 
from twisted.internet import protocol, reactor, endpoints 
 
class Echo(protocol.Protocol): ...

Brython

Site : https://brython.info/

Mais que font le W3C et les hautes instances du Web ? Voilà l’avenir du HTML et du Web. Enfin, un langage simple, facile à apprendre et LISIBLE côté navigateur.

Il s’agit tout simplement d’un portage du langage Python écrit en JavaScript, et l’objectif est de remplacer JavaScript par le langage Python.

Voici un exemple :

<html> 
<head> 
   <script src="/brython.js"></script> 
</head> 
<body onload="brython()"> 
 
<script type="text/python"> 
from browser import document, alert 
 
# associe une fonction à l'événement "click" sur le bouton 
 
def click(ev): 
    alert(document["zone"].value) 
 
document["echo"].bind("click") 
</script> 
 
<input id="zone"><button id="echo">click !</button> 
</body> 
</html>  

On remarquera la ligne <script type="text/python"> dans ce code HTML ; pour une fois nous aimerions que les choses aillent très vite dans le microcosme du Web.

Voici un petit conseil toutefois : respecter l’indentation dans une page web n’est pas toujours facile et il est préférable de déporter...

Fuse

File System in User Space, plus connu sous le nom de FUSE, est une librairie qui permet à un utilisateur sans privilèges de contrôler un système de fichiers virtuel comme /proc ou /sys par exemple.

Python a plusieurs modules s’interfaçant avec cette librairie, comme python-fuse ou pyfuse.

C’est vrai que depuis longtemps, nous aimerions coder un système de fichiers que l’on pourrait interroger avec du SQL, juste pour voir si cela peut être utile. Peut-être d’ailleurs est-ce déjà fait ?

L’ordre pour lister les fichiers deviendrait quelque chose comme :

select * from fichiers

Find pourrait être une requête de ce style :

select * from fichiers where date_modif ≥ 01/01/2020

Autre idée : il devrait aussi être possible de voir une base de données comme un système de fichiers.

ls                   pour lister les tables 
cat table            pour select * from table 
cat table | wc -l    select count(*) from table 

Ce ne sont pas les idées qui manquent, mais plutôt le temps nécessaire pour les étudier ou les réaliser.

Juste un petit conseil avant de vous lancer dans la programmation avec FUSE : par expérience, il est préférable de monter une machine virtuelle dédiée...

Ipython et Jupyter

Au début, il y avait ipython, un terminal interactif permettant de saisir du code directement, mais surtout proposant un historique riche, de l’introspection, de la complétion automatique et des syntaxes additionnelles. Ipython permettait, entre autres, d’utiliser d’autres bibliothèques graphiques que Tkinter.

Puis ipython a proposé une interface web et un format d’échanges : le notebook (calepin en français). Un notebook mélange texte, code, données, images, vidéos et présentations pour former un ensemble cohérent facile à copier, sauvegarder et échanger.

Depuis, c’est devenu un outil indispensable dans les milieux scientifiques qui manipulent beaucoup de données.

Puis le projet s’est étendu à d’autres langages que Python, et maintenant le projet se nomme Jupyter et permet de programmer avec plus de quarante langages (Python, Ruby, bash, R, scala, etc.).

Un notebook est d’abord un noyau qui détermine le langage utilisé. Il est constitué de cellules qui peuvent être de type :

Code

Pour saisir du code

Texte Brut

Pour utilisation avec nbconvert (outil de conversion d’un notebook en PDF HTML…)

Markdown

Pour saisir du texte

Titre

Pour la présentation du notebook

Une cellule peut être copiée et collée, supprimée...

Sphynx

Cet outil peut paraître un peu complexe à mettre en œuvre, mais une fois que l’on a compris, cela devient assez limpide.

Pourquoi évoquer cet outil ? Grâce à lui, nous avons pu développer la génération d’une documentation d’entreprise en fonction d’une base de données contenant des informations sur des tiers (clients et fournisseurs).

Voici quelques images du résultat :

L’index général du site :

images/18EI01.png

SPHYNX INDEX

Une fiche tiers clients :

images/18EI02.png

SPHYNX FIC CLI

images/18EI03.png

SPHYNX CLI2

Le but était de générer une documentation dans un format simple (le HTML) et de pouvoir gérer certains accès avec une authentification, comme la partie sur les noms des machines par exemple.

Les développeurs ont vraiment tout fait pour faciliter l’accès à leurs outils.

Ainsi, pour commencer, il faut préparer un environnement en lançant la commande sphynx-quickstart.

Après avoir répondu à un certain nombre de questions, l’outil crée de multiples fichiers et répertoires, dont un fichier Makefile.

Il suffit de lancer la commande make html (il y en a plein d’autres…) pour que l’outil génère un site HTML que l’on peut tester en se mettant dans le répertoire _build/html et en lançant la commande python...

Ansible

Ansible est un formidable outil pour les ingénieurs système, cela signifie que l’on peut encore plus automatiser certaines tâches. Un bon ingénieur système doit être fainéant, après tout, il fait travailler les machines ; Ansible pourrait justement en être la preuve.

Et par-dessus tout, il ne nécessite que des outils standard comme SSH, présent sur toutes les distributions Linux.

Ansible permet de gérer des configurations, de construire des machines virtuelles, d’automatiser des tâches sur de multiples serveurs, et bien plus encore.

Bien entendu, il est écrit en Python et utilise même Jinja comme moteur de templates.

L’un des premiers playbooks (terme pour dire script Ansible) que nous avons écrits a permis de mettre à jour de nombreuses machines avec un petit script chargé de faire le ménage dans certains répertoires.

Le script menage.sh est juste une succession de fonctions de ce style :

## Epuration des fichiers log de menage.sh 
epur_log() 
{ 
   find ${LOG_DIR} -name *.log -mtime +${NB_JOUR} \ 
       -exec rm {} \; 2>&1 
} 

Mais il fallait quand même créer les répertoires nécessaires pour ce script, le copier et générer la crontab qui va avec.

Et tout cela...

Le framework Django

Django est LE framework Python pour créer des applications web dynamiques.

Ce framework fournit un ensemble d’outils et de fonctionnalités de base comme l’accès à la base de données, la gestion des sessions, le routage des URL, l’internationalisation, la génération à partir de modèles.

En utilisant Django, il est possible de construire des applications web sécurisées et fiables très rapidement, car Django fournit un environnement complet de développement.

Les accès aux bases de données sont standardisés grâce à un Object RelationnalMapper (ORM) ; ainsi, il est possible de commencer avec SQLite et de déployer sur une autre base de données.

Les évolutions de schémas sont prises en compte avec la gestion des migrations, tout comme les jeux de données pour faire des tests.

Django est aussi capable de construire une interface d’administration automatiquement pour les tables déclarées dans l’ORM.

Django intègre également la notion de projet (le site web) et d’application dans un projet, la gestion des utilisateurs par exemple, et si l’application est construite d’une certaine manière, celle-ci peut être réutilisable dans d’autres projets.

Il existe beaucoup de modules Django déjà prêts...

Apache Airflow

Cet outil est une découverte récente en ce qui nous concerne et devrait certainement devenir un outil très apprécié incessamment sous peu.

C’est un outil écrit en Python et tombé dans la fondation Apache, d’où le nom d’Apache Airflow.

Originellement écrit par Maxime Beauchemin pour AirBnb, Airflow est une plateforme faite pour gérer des flux de travaux.

Exemple : un fichier est généré sur une machine puis doit être traité par une autre pour ensuite être historisé sur un troisième serveur.

Facile : cron + shell + ssh/scp et quelques fichiers de logs, et le tour est joué.

Par contre, si l’on multiplie ce genre de tâches et que les utilisateurs veulent orchestrer, voire même surveiller le déroulement de ces tâches, cela peut devenir compliqué.

C’est dans ce contexte qu’intervient Apache Airflow.

Prenons le cas classique de l’ETL (Extract Transform and Load).

Nous prenons des données sur le serveur A, puis les copions sur le serveur B, et les intégrons dans la base de données pour ensuite archiver le fichier.

Tâche 1 : extraction + génération du fichier

Tâche 2 : copie sur le serveur B du fichier

Tâche 3 : intégration dans la base de données

Tâche 4 : envoi d’un...

Résumé

Chaque section de ce chapitre pourrait donner lieu à un ouvrage dédié, comme quoi il y a encore de quoi faire dans notre petit monde de l’informatique.

Si vous ne les connaissiez pas, nous espérons surtout avoir aiguisé votre curiosité sur ces produits qui sont susceptibles de devenir incontournables.

Cela montre aussi que les petites gouttes forment les grands fleuves. Guido Van Rossum ne pensait certainement pas devenir un Dictateur Bénévole quand il a lancé, pour la première fois, son éditeur afin de commencer le code du langage Python.

Quand un outil est bon, il perdure ; le langage Python fait partie de ces outils-là.