Programmation système en Python

Modules

Un module est un fichier Python contenant des fonctions et des constantes.

  • import <module> : sys.path est parcouru pour trouver un fichier de nom <module>.py, ce module est chargé, puis compilé en bytecode, puis exécuté. L’exécution du code peut être invisible (définition de classes, de fonctions), ou pas
  • __name__ : nom du fichier/module courant ; vaut __main__ s’il est exécuté en tant que module principal
  • __file__ : chemin absolu vers le fichier/module courant. Utile dans os.path.join(os.path.dirname(__file__), 'file.local')
  • python -m <module_name> : équivalent à l’exécution de import <module_name> (= chargement + exécution)
    • python -m pip : pip
    • python -m venv : virtualenv
    • python -m http.server : serveur http pour fichiers statiques

Packages

Un package est un ensemble de modules organisé hiérarchiquement. C’est un répertoire, qui contient un fichier __init.py__ pour le distinguer d’un simple répertoire contenant des fichiers python.

  • from <package> import <module>
  • import <package>.<module>

Scripts

  • shebang à mettre en en-tête des scripts : #!/usr/bin/env python ; la commande python est alors cherchée dans le $PATH de l’utilisateur
  • ajouter aussi : # -*- coding: utf-8 -*- pour éviter les problèmes d’encodage de caractères

Module os

Environnement

  • os.name : nom du système d’exploitation, parmi posix (Linux, MacOS, BSD), ‘nt’ (Windows), ‘java’ (Android)
  • os.uname() : renvoit un objet avec 5 attributs d’infos détaillées sur l’OS
  • os.environ: mapping de toutes les variables d’environnement (au moment de l’import)
  • os.getenv(<varname>, <default> : donne la valeur d’une variable d’environnement, avec une valeur par défault si elle n’existe pas

Système de fichiers

  • os.getcwd() : renvoie le chemin d’accès courant
  • os.walk(DIR) : générateur qui parcours récursivement les fichiers et répertoires de DIR; à chaque répertoire (y compris DIR) un triplet (dirpath, dirnames, filenames) est généré
  • os.remove(FILEPATH) : supprime le fichier de chemin d’accès FILEPATH
  • os.rmdir(DIRPATH) : supprime le répertoire (qui doit être vide) de chemin d’accès DIRPATH

os.path

  • os.path.join(PATH1, PATH2) : renvoie un chemin d’accès, concaténation de PATH1 et PATH2
  • os.path.exists(PATH) : renvoie True s’il existe un fichier ou un répertoire de chemin d’accès PATH
  • os.path.getsize(FILEPATH) : renvoie la taille en octet du fichier FILEPATH
  • os.path.samefile(PATH1, PATH2) : True si les deux chemins d’accès font référence au même fichier (même i-node)

Module sys

  • sys.path : liste des répertoires ou des .zip où python cherche les modules. Cette liste est augmenté des répertoires de la variable d’env. PYTHONPATH si celle-ci est définie
  • sys.modules : dictionnaire de tous les modules chargés
  • sys.argv : liste des arguments lors d’une exécution en ligne de commande
  • sys.version_info : 5-uple qui décrit la version de l’interpréteur Python utilisé. Les deux premiers sont les numéros de version major et minor, par exemple 2 & 7, ou 3 & 6

Module urllib.parse (package urllib)

  • urllib.parse.urlsplit(url) : décompose une url en ses constituants (addressing scheme, network location, path, query, fragment identifier)
  • urllib.parse.urlunsplit(parts) : opération inverse de urlsplit
  • urllib.parse.join(base, url) : construit une url absolue en combinant une url base avec une autre url url. Si url est incomplète, ses éléments manquants sont pris dans base.