Au niveau Expert, un programme Python interagit avec son environnement : lire des arguments de ligne de commande, explorer un dossier, gérer des chemins de fichiers de façon portable entre Windows, macOS et Linux. Trois modules standard couvrent ces besoins : sys (l'interpréteur), os (le système d'exploitation), et pathlib (les chemins modernes).
Le module sys
sys donne accès à des informations sur l'interpréteur Python lui-même et ses entrées/sorties.
Arguments de ligne de commande : sys.argv
Quand vous lancez python script.py arg1 arg2, sys.argv contient la liste ["script.py", "arg1", "arg2"].
# fichier : compter.py
import sys
if len(sys.argv) < 2:
print("Usage : python compter.py <nom>")
sys.exit(1)
nom = sys.argv[1]
print(f"Bonjour {nom} !")Exécution :
$ python compter.py Alice
Bonjour Alice !Arrêter le programme : sys.exit()
import sys
if erreur_grave:
print("Erreur : impossible de continuer")
sys.exit(1) # code de sortie non-zero = erreurCodes de sortie conventionnels :
0(défaut) : succès.1: erreur générique.2: mauvais usage / mauvais arguments.
Ces codes sont utilisés par les scripts shell (if python script.py; then ...).
La version de Python : sys.version
import sys
print(sys.version)
print(sys.version_info)
print(f"Python {sys.version_info.major}.{sys.version_info.minor}")Utile pour des tests de compatibilité :
if sys.version_info < (3, 10):
raise RuntimeError("Ce script requiert Python 3.10 minimum")Les flux d'entrée/sortie
sys.stdin, sys.stdout, sys.stderr sont les flux standard.
import sys
# Écrire sur la sortie d'erreur (pratique pour les messages de debug)
print("Attention !", file=sys.stderr)
# Lire depuis stdin (utile pour les scripts qui acceptent des données piped)
for ligne in sys.stdin:
print(f"Reçu : {ligne.strip()}")Exemple de pipe Unix :
echo "hello\nworld" | python mon_script.pyLe chemin de recherche des modules : sys.path
Python cherche les modules dans les dossiers listés dans sys.path.
import sys
print(sys.path[:3], "...") # 3 premiers élémentsOn peut le modifier à l'exécution si besoin (rare et déconseillé) :
import sys
sys.path.insert(0, "/chemin/vers/mon/dossier")
import mon_module # maintenant trouvablePréférez installer vos modules via pip dans un environnement virtuel.
Le module os
os offre des fonctions système portables (fonctionnent sur Windows, Linux, macOS).
Variables d'environnement : os.environ
import os
# Lire une variable d'environnement
home = os.environ.get("HOME", "défaut")
user = os.environ.get("USER", "anonyme")
print(f"HOME : {home}")
print(f"USER : {user}")
# Définir une variable pour les sous-processus
os.environ["MA_VARIABLE"] = "valeur"Usage typique : récupérer des secrets (API keys, mots de passe) sans les mettre dans le code.
import os
API_KEY = os.environ.get("API_KEY")
if not API_KEY:
raise RuntimeError("La variable d'environnement API_KEY n'est pas définie")Répertoire courant : os.getcwd(), os.chdir()
import os
print("Répertoire actuel :", os.getcwd())
# Changer de répertoire (localement pour le programme)
# os.chdir("/tmp")Lister un dossier : os.listdir()
import os
# Contenu du répertoire courant
print(os.listdir("."))Créer / supprimer : os.makedirs(), os.remove()
import os
# Créer un dossier (avec sous-dossiers intermédiaires)
os.makedirs("mon/dossier/imbrique", exist_ok=True)
# Supprimer un fichier
os.remove("fichier.txt")
# Supprimer un dossier vide
os.rmdir("dossier_vide")
# Supprimer un dossier et tout son contenu
import shutil
shutil.rmtree("dossier_non_vide")Chemins avec os.path (ancien style)
Le module os.path manipule les chemins sous forme de chaînes. Historiquement la référence, aujourd'hui dépassé par pathlib.
import os.path
chemin = "/home/user/documents/rapport.txt"
print(os.path.basename(chemin)) # 'rapport.txt'
print(os.path.dirname(chemin)) # '/home/user/documents'
print(os.path.splitext(chemin)) # ('/home/user/documents/rapport', '.txt')
print(os.path.exists(chemin)) # False (ce chemin n'existe pas)
# Assembler un chemin (portable)
chemin = os.path.join("dossier", "sous_dossier", "fichier.txt")
print(chemin)