Sh – exécution de commandes shell en Python

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Qu'est-ce que la bibliothèque Sh ?

Dans de nombreux projets Python, il est nécessaire d'exécuter des commandes shell : gérer des fichiers, lancer des processus système, interagir avec des outils CLI installés. Utiliser os.system ou subprocess est possible, mais ces approches sont lourdes et nécessitent une gestion manuelle des arguments, des erreurs et des sorties.

La bibliothèque Sh offre une manière propre et pythonique d'appeler des commandes shell comme de simples fonctions Python. Elle simplifie considérablement l'intégration d'utilitaires externes, rend le code lisible et facile à déboguer.

Avantages de l'utilisation de Sh

La bibliothèque Sh présente plusieurs avantages majeurs par rapport aux méthodes standard d'exécution de commandes système :

Lisibilité et simplicité de syntaxe – les commandes ressemblent à des fonctions Python classiques, ce qui rend le code plus compréhensible et maintenable.

Gestion automatique des erreurs – la bibliothèque traite automatiquement les codes de retour et lève des exceptions en cas d'erreur.

Sécurité – protection contre les injections de commandes grâce à un échappement correct des arguments.

Flexibilité – prise en charge des pipelines, de l'exécution en arrière-plan, des entrées-sorties en flux continu et de nombreuses autres fonctionnalités.

Installation et configuration

L'installation de la bibliothèque se fait via pip :

pip install sh

Pour l'utiliser dans votre code, un simple import suffit :

import sh

Principes de base

Sh mappe automatiquement le nom de toute commande shell en une fonction Python. Cela permet de les appeler de manière naturelle :

print(sh.ls("-l"))

Chaque appel retourne un objet contenant la sortie standard (stdout), qui peut être convertie en chaîne de caractères, liste de lignes, bytes ou autres formats.

Utilisation de base

Gestion des fichiers

# Liste des fichiers
print(sh.ls("-lah"))

# Création d'un fichier
sh.touch("fichier.txt")

# Copie d'un fichier
sh.cp("fichier.txt", "copie.txt")

# Suppression d'un fichier
sh.rm("copie.txt")

# Création d'un répertoire
sh.mkdir("test_dir")

# Déplacement d'un fichier
sh.mv("fichier.txt", "test_dir/")

Traitement de texte

# Affichage du contenu d'un fichier
contenu = sh.cat("fichier.txt")
print(str(contenu))

# Recherche dans les fichiers
resultats = sh.grep("python", "*.py")
for resultat in resultats:
    print(resultat.strip())

# Comptage de lignes
nombre_lignes = sh.wc("-l", "fichier.txt")
print(f"Nombre de lignes : {nombre_lignes.strip()}")

Gestion des arguments et options

Sh prend en charge différentes façons de passer des arguments aux commandes :

Arguments positionnels

sh.ls("--color", "auto", "/home/utilisateur")

Arguments nommés

# Options longues
sh.ls(color="auto", all=True, human_readable=True)

# Options courtes
sh.ls(a=True, l=True, h=True)

Approche combinée

# Utilisation mixte
sh.find("/home", name="*.py", type="f")

Traitement de la sortie des commandes

Récupération du résultat sous forme de chaîne

sortie = sh.ls()
print(str(sortie))

Traitement ligne par ligne

for ligne in sortie:
    print(ligne.strip())

Travail avec les bytes

sortie_brute = sh.ls()
donnees_bytes = sortie_brute.stdout

Division en une liste de lignes

lignes = str(sh.ls()).split('\n')
for ligne in lignes:
    if ligne.strip():
        print(ligne)

Gestion des erreurs

La bibliothèque Sh offre des mécanismes puissants pour la gestion des erreurs :

Gestion de base des erreurs

Recommendations