Hallo,
kann mir jemand verraten wie ich bei dem unten dargestellten Befehl den Output zu einer sauber Liste hin bekomme. Ich möchte die Liste der auf dem System registrieten root User in eine Liste bekommen.
Der Output von result ist wie folgt:
result =['user1,user2,user3']. Also wird der ganze String als ein Element gespeichert. Wie bekomme daraus eine vernüftige Liste. Ich habe es mit replace und so versucht aber bekomme es nicht hin. Hat da vielleicht jemand einen Tip wie ich das hinbekommen kann?.
HOST="host1"
COMMAND="cat /etc/group|grep wheel|sed 's/wheel10://g'|tr -d \"\n\" "
ssh = subprocess.Popen(["ssh", "%s" % HOST, COMMAND], # ssh login auf dem Server und bestimme Befehl ausfuehen
shell=False,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
result = ssh.stdout.readlines()
Danke & Gruss
Remote command output
Code: Alles auswählen
import shlex
args = ['ssh', host]
args += shlex.split(command)
ssh = subprocess.Popen(args)
# u.s.w.
Zuletzt geändert von snafu am Mittwoch 4. Mai 2016, 12:53, insgesamt 1-mal geändert.
Und nur mal als Hinweis: Alles, was du mit den typischen Shell-Tools für dein Command machst, kannst du auch mit den Boardmitteln von Python erledigen. Python bringt sehr viele Methoden für Strings mit. Müsstest du dich nur entsprechend einlesen...
@falke: Mit readlines liest Du die Ausgabe von Deinem Befehl zeilenweise in eine Liste. Wenn Du nur eine Zeile hast, weil Du mit tr alles in eine Zeile packst, macht vielleicht ein read mit split mehr Sinn. Oder Du läßt gleich das tr weg, dann bekommst Du die einzelnen Datensätze gleich in eigenen Zeilen.
Wobei das mit ganzen Pipes sowieso nicht funktionieren wird. Und `shlex.split()` funktioniert bei komplexeren Strings auch nicht wirklich so wie man (zumindest: ich) es erwarten würde. Wenn es schnell gehen soll und man mit Python Möglichkeiten zur Stirngverarbeitung nicht vertraut ist, dann würde ich hier sogar ausnahmsweise `shell=True` setzen und das Command als einzelnen String übergeben. Aber dann natürlich auf eigene Gefahr.
Hallo,
kurz nachdem ich die Frage gestellt hatte habe ich auch die Antwort gefunden.
Habe es wie folgt gelöst.
result = result[0].split(",") # Damit wird die es zu einer Liste mit mehreren Elementen
Vielen Dank an die Runde!
Gruß
kurz nachdem ich die Frage gestellt hatte habe ich auch die Antwort gefunden.
Habe es wie folgt gelöst.
result = result[0].split(",") # Damit wird die es zu einer Liste mit mehreren Elementen
Vielen Dank an die Runde!
Gruß
@falke: Ich möchte dann noch mal Deine Aufmerksamkeit auf den Beitrag von Sirius3 lenken: `read()` macht es dann einfacher.