Ich wollte ein Bash-Skript in Python zum Training konvertieren. Der Bash-Skript fragt einen Remote-Host für seine df via ssh und sucht in die zurückgegebenen Zeile für ein bestimmtes Feld, etwa so:Grep-ing für Linien in Python
ssh $_host df 2>/dev/null | grep -i $_filesystem | grep :
In Python, verwende ich subprocess.call
in Kombination mit shlex.split
die „df“ Ausgabe zu erhalten:
_cmd = shlex.split("ssh %s df 2>/dev/null" % _host)
_test = subprocess.check_output(_cmd)
Hier _test kehrt als Typ String und wenn ich will es für Zeile Zeile suchen, gibt es jedes Zeichen als eine neue Linie aus. subprocess.Popen
für Rohre funktioniert auch nicht. Ich möchte nur die Zeile ausgeben, in der mein Suchstring zur weiteren Formatierung gefunden wird.
Ich habe bereits mehrere Versuche gesehen, die sich einer Lösung nähern, aber die meisten von ihnen durchlaufen Dateien mit definierten Zeilenumbrüchen, keine Zeichenfolgen, die von einem Unterprozessaufruf zurückgegeben werden.
Bash ist eine domänenspezifische Sprache, die speziell für die Interaktion mit Prozessen entwickelt wurde. Python ist eine allgemeine Sprache, die alles kann. Ich würde gerne sehen, dass Sie einen Webserver in einem Shell-Skript schreiben. –
Danke für die Klärung, obwohl es überhaupt nicht hilft. –
Der "richtige" Weg wäre, etwas zu importieren, das 'ssh' verarbeiten kann. Ich würde 'fabric' empfehlen (google:" python fabric "). Momentan rufen Sie nur die ausführbare Datei ssh von python auf, was nicht so ist (normalerweise). Angesichts Ihres Hintergrunds in bash ist es verständlich, aber im Gegensatz zu bash Python bevorzugt Sie ** Bibliotheken **, nicht ** ausführbare Dateien **. –