Was ist die Sh-Bibliothek?
In vielen Python-Projekten müssen Shell-Befehle ausgeführt werden: Dateien verwalten, Systemprozesse starten oder mit installierten CLI-Tools interagieren. os.system oder subprocess sind zwar nutzbar, aber umständlich und erfordern manuelle Argumentverarbeitung, Fehlerbehandlung und Ausgabesteuerung.
Die Sh-Bibliothek bietet eine saubere, pythonische Möglichkeit, Shell-Befehle wie normale Python-Funktionen aufzurufen. Sie vereinfacht die Integration externer Werkzeuge erheblich, macht den Code lesbarer und leichter debuggbar.
Vorteile der Sh-Bibliothek
Die Sh-Bibliothek bietet entscheidende Vorteile gegenüber Standardmethoden zur Ausführung von Systembefehlen:
Lesbarkeit und einfache Syntax – Befehle sehen aus wie normale Python-Funktionen, was den Code verständlicher und wartbarer macht.
Automatische Fehlerbehandlung – Die Bibliothek verarbeitet Rückgabecodes automatisch und wirft bei Fehlern Ausnahmen.
Sicherheit – Schutz vor Command Injections durch korrektes Escaping von Argumenten.
Flexibilität – Unterstützung für Pipes, Hintergrundausführung, Streaming I/O und viele weitere Funktionen.
Installation und Einbindung
Die Installation erfolgt über pip:
pip install sh
Für die Einbindung im Code reicht ein einfacher Import:
import sh
Grundlegende Funktionsweise
Sh bildet automatisch jeden Shell-Befehlsnamen auf eine Python-Funktion ab. So können Sie diese natürlich aufrufen:
print(sh.ls("-l"))
Jeder Aufruf gibt ein Objekt zurück, das stdout enthält und in einen String, eine Liste von Strings, Bytes oder andere Formate umgewandelt werden kann.
Basisnutzung
Dateioperationen
# Dateien auflisten
print(sh.ls("-lah"))
# Datei erstellen
sh.touch("datei.txt")
# Datei kopieren
sh.cp("datei.txt", "kopie.txt")
# Datei löschen
sh.rm("kopie.txt")
# Verzeichnis erstellen
sh.mkdir("test_verzeichnis")
# Datei verschieben
sh.mv("datei.txt", "test_verzeichnis/")
Textverarbeitung
# Dateiinhalt ausgeben
inhalt = sh.cat("datei.txt")
print(str(inhalt))
# In Dateien suchen
treffer = sh.grep("python", "*.py")
for treffer in treffer:
print(treffer.strip())
# Zeilen zählen
zeilenanzahl = sh.wc("-l", "datei.txt")
print(f"Zeilenanzahl: {zeilenanzahl.strip()}")
Argumente und Optionen
Sh unterstützt verschiedene Arten der Argumentübergabe:
Positionsargumente
sh.ls("--color", "auto", "/home/benutzer")
Benannte Argumente
# Lange Optionen
sh.ls(color="auto", all=True, human_readable=True)
# Kurze Optionen
sh.ls(a=True, l=True, h=True)
Kombinierter Ansatz
# Gemischte Nutzung
sh.find("/home", name="*.py", type="f")
Ausgabe von Befehlen verarbeiten
Ergebnis als String
ausgabe = sh.ls()
print(str(ausgabe))
Zeilenweise Verarbeitung
for zeile in ausgabe:
print(zeile.strip())
Arbeiten mit Bytes
roh_ausgabe = sh.ls()
bytes_daten = roh_ausgabe.stdout
Aufteilung in String-Liste
zeilen = str(sh.ls()).split('\n')
for zeile in zeilen:
if zeile.strip():
print(zeile)
Fehlerbehandlung
Die Sh-Bibliothek bietet leistungsstarke Mechanismen zur Fehlerbehandlung:
Einfache Fehlerbehandlung
Auch in der Bibliothek
Aufgabenwarteschlangen für TypeScript: Bull, Bee-Queue und asynchrone Verarbeitung
ORM für Java: Vergleich von Hibernate, MyBatis, JPA und Spring Data
Integration von Prometheus-Metriken in Java-Anwendungen: Bibliothek simpleclient
SwiftLint für Swift: Das komplette Guide mit Beispielen