Sh – Shell-Befehle in Python steuern

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

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

Empfehlungen