Seite 1 von 1

return print ausgabe

Verfasst: Samstag 29. Dezember 2007, 16:50
von moesibaer
Hallo,

ich habe arbeite gerade ein bischen mit pxssh. Ich erstelle damit eine SSH Verbindung zu einem beliebigen Host und setze dort Kommandos ab.

Mein Problem ist nun die Rückgabe. Der String von der pts-Konsole beinhaltet natürlich einen Haufen von Kodierungen die mit dem print statement wunderschön umgesetzt werden. Da die Funktion jedoch von einem Ajaxscript per HTML Request aufgerufen wird, muss ich den String returnen. Daher sieht die Rückgabe entsprechend häßlich aus.

Gibt es eine Möglichkeit das print statement als Funktion mit Rückgabe aufzurufen oder die Konsolenausgabe nach HTML umzuformen?

Vielen Dank
[/code]

Verfasst: Samstag 29. Dezember 2007, 17:33
von Leonidas
Das ``print``-Statement schreibt normalerweise nach ``sys.stdout``, also kannst du dein eigenes file-like-object dort hin setzen.

Verfasst: Samstag 29. Dezember 2007, 18:33
von moesibaer
file-like object bedeutet StringIO nicht wahr?! Wie setze ich das den auf den Stdout? Sorry so tief bin ich noch nicht in pyhon eingedrungen.

Danke

Verfasst: Samstag 29. Dezember 2007, 18:52
von BlackJack
Einfach den Namen an das "file-like" binden: ``sys.stdout = file_like``.

Verfasst: Samstag 29. Dezember 2007, 18:58
von moesibaer

Code: Alles auswählen

import sys
from StringIO import StringIO

old = sys.stdout
file_like = StringIO()
sys.stdout = file_like
print "blub"
sys.stdout = old
file_like.read()
Die Ausgabe von ´´file_like.read()´´ ist aber leer???

Verfasst: Samstag 29. Dezember 2007, 19:32
von Leonidas

Code: Alles auswählen

import sys
from StringIO import StringIO

file_like = StringIO()
sys.stdout = file_like
print 'blub'
sys.stdout = sys.__stdout__
print file_like.getvalue()

Verfasst: Sonntag 30. Dezember 2007, 00:54
von moesibaer
DANKE, klappt jetzt wunderbar. Vielen Dank für die Hilfe!

Verfasst: Sonntag 30. Dezember 2007, 14:13
von Joghurt
Warum so umständlich?

Code: Alles auswählen

import sys
from StringIO import StringIO

file_like = StringIO()
print >>file_like, 'blub'
print file_like.getvalue()

Verfasst: Sonntag 30. Dezember 2007, 14:38
von Leonidas
Joghurt hat geschrieben:Warum so umständlich?
Es ist vielleicht nicht immer möglich, jedes ``print``-Statement umzuschreiben, daher ist die Umleitung von ``sys.stdout`` sehr praktisch.