Remote command output

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
falke
User
Beiträge: 7
Registriert: Mittwoch 4. Mai 2016, 12:10

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/wheel:x:10://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
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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.
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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...
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@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.
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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.
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Vieleicht hilft auch das grp-Modul?

Die offizielle Doku beschränkt sich dabei nur auf das Nötigste. Für weitere Erläuterungen könnte dies interessant sein.
falke
User
Beiträge: 7
Registriert: Mittwoch 4. Mai 2016, 12:10

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ß
BlackJack

@falke: Ich möchte dann noch mal Deine Aufmerksamkeit auf den Beitrag von Sirius3 lenken: `read()` macht es dann einfacher.
Antworten