Manchmal würde man gerne alle print-Statements bzw. alle Ausgaben an stdout in einen Buffer umleiten.
Dazu muss man nur sys.stdout umleiten. Dazu kann man das StringIO-Modul verwenden. Einfachste Möglichkeit ist die Angabe des Ausgabebuffers:
1 # StringIO Modul importieren und einen Buffer erstellen
2 import StringIO
3 output = StringIO.StringIO()
4
5 # print in den buffer schreiben lassen
6 print >> output, "Hallo Welt"
7
8 # Buffer ausgeben
9 print "Bufferinhalt:"
10 print output.getvalue()
Die zweite Möglichkeit ist es sys.stdout umzuleiten:
1 # StringIO Modul importieren und einen Buffer erstellen
2 import sys
3 import StringIO
4 output = StringIO.StringIO()
5
6 old_stdout = sys.stdout
7
8 # sys.stdout umleiten
9 sys.stdout = output
10
11 print "Hallo Welt"
12
13 # alten stdout wiederherstellen
14 sys.stdout = old_stdout
15
16 # Buffer ausgeben
17 print "Bufferinhalt:"
18 print output.getvalue()
Und hier ist eine Möglichkeit ohne StringIO:
1 import sys
2
3 class out_buffer:
4 """
5 Hilfsklasse um Ausgaben erst zwischenzuspeichern und dann gesammelt auszugeben.
6 Arbeitet wie StringIO -- aber natürlich kann man die write-Methode beliebig
7 anpassen.
8 """
9 def __init__(self):
10 self.data = []
11
12 def write(self, txt):
13 self.data.append(txt)
14
15 def get(self):
16 return ''.join(self.data)
17
18 def getall(self): # Inhalt ausgeben und Buffer leeren
19 buf = ''.join(self.data)
20 self.data = []
21 return buf
22
23
24 if __name__ == "__main__":
25 # stdout speichern
26 save_stdout = sys.stdout
27
28 My_out_buffer = out_buffer() # Buffer erzeugen
29 sys.stdout = My_out_buffer # umleiten
30
31 print "bla bla", 3846
32 print "blub..."
33 sys.stdout.write("test2") # ...das geht auch...
34
35 # stdout wiederherstellen
36 sys.stdout = save_stdout
37
38 print "Das wars:\n'''%s'''" % My_out_buffer.get()