Ausgabe ssh Remote-Befehl in Datei speichern

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
myrpedder
User
Beiträge: 3
Registriert: Dienstag 29. Juni 2010, 08:19

Hallo zusammen,
vorab, ich bin ein vollkommener Python-newbie. Ich habe aber leider die Aufgabe, einige Skripte, die vorher unter 2.4 liefen in 2.6 zu portieren.
Nun zu meinem Problem:

Ich muss die Ausgabe eines ssh Remote-Befehls (z.B. cat /proc/meminfo), welches auf einem entfernten Rechner ausgefürht wird, auf dem aufrufenden Rechner als File speichern.
Unter 2.4 ging das über das Modul "cache" und dem Befehl 'cache.cachessh (filename,commando)'
Unter 2.6 finde ich eine solche Funktion nicht. Leider habe ich auch nichts vergleichbares gefunden.
Ich hoffe, es kann mir jemand helfen.
Vielen Dank schon mal.

myrpedder
BlackJack

@myrpedder: So eine Funktion gibt es auch in der Standardbibliothek von Python 2.4 nicht. Wo kommt die her? Google findet für "cache.cachessh" keinen einzigen Treffer!?

Vielleicht wirst Du mal etwas konkreter was nicht geht!? Also welche Quelltextzeilen führen zu welchem Fehler?
myrpedder
User
Beiträge: 3
Registriert: Dienstag 29. Juni 2010, 08:19

Hallo Blackjack,
eigendlich ganz einfach. Ich möchte das Ergebnis, was z.B. als shellskript lauten würde:

ssh user@remote-ip 'cat /proc/meminfo'

auf dem aufrufenden Rechner als Datei speicher. Das ist es schon. Unter z.B. bash nicht schwerm, unter python für mich schon.

So weit bin ich schon:

Code: Alles auswählen

cmd = sshvbspath + "/vbsssh " + sys.argv[1] + " \"cat /proc/loadavg /proc/stat /proc/meminfo\""
filename = datapath + "/python_cache/" + sys.argv[1] + "-stat.py.dat"
file = open (filename,'w')
ergebnis=os.system(cmd)
# --> ??? print ergebnis ???
file(close)
In "ergebnis" steht jetzt schon das, was ich brauche. Jetzt "ergebnis" nur in einer Datei <filename> ablegen.

Aber vielen Dank für die schnelle Reaktion.
Gruß

myrpedder
Zuletzt geändert von Anonymous am Dienstag 29. Juni 2010, 09:42, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
BlackJack

@myrpedder: Das geht mit `os.system` nicht. Dafür ist das `subprocess`-Modul gedacht.

Man kann in Python literale Zeichenketten in ' oder in " einfassen -- damit kann man sich Backslashes sparen wenn man die jeweils andere Sorte von Anführungszeichen innerhalb der Zeichenkette schreiben möchte.

Zum Zusammensetzen von Pfaden sollte man `os.path.join()` verwenden.
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Eventuell ist es einfach, wenn du ein Modul wie Paramiko benutzt: http://www.lag.net/paramiko/docs/toc-pa ... odule.html
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Mit subprocess ist das kein Problem:

Code: Alles auswählen

from subprocess import Popen, PIPE
stdout, stderr = Popen([cmd, args], stdout=PIPE, stderr=PIPE).communicate()
print stdout
-ungetestet-

//Edit: communicate liefert stdout als string zurück..
the more they change the more they stay the same
myrpedder
User
Beiträge: 3
Registriert: Dienstag 29. Juni 2010, 08:19

Vielen Dank,
ich habe das Problem jetzt gelöst.
Gruß

Myrpedder
Antworten