Stdout wird umgeleitet, indem sys.stdout ein file-like Object mit
mindestens den Methoden write und flush zugewiesen wird.
Mit
1 | sys.stdout = sys.__stdout__
|
Wird die Umleitung wieder aufgehoben.
Hier ist ein kleines Beispiel:
1 | import sys
|
2 | from PyQt4.QtGui import *
|
3 |
|
4 | # File-like Klasse, an dessen Instanz stdout umgeleitet wird
|
5 | class TextEditStdout:
|
6 | def __init__(self, textEdit):
|
7 | self.textEdit = textEdit
|
8 | self.text = ''
|
9 |
|
10 | def write(self, text):
|
11 | # QTextEdit.append() erwartet die Texte absatzweise, deswegen
|
12 | # werden hier die Texte gesammelt und an den Newlines in Absätze
|
13 | # zerlegt
|
14 | *paragraphs, self.text = (self.text + text).split('\n')
|
15 | list(map(self.textEdit.append, paragraphs))
|
16 |
|
17 | def flush(self):
|
18 | pass
|
19 |
|
20 | # Beispielapplikation
|
21 | app = QApplication(sys.argv)
|
22 | textEdit = QTextEdit()
|
23 | textEdit.show()
|
24 |
|
25 | # Umleiten von stdout
|
26 | sys.stdout = TextEditStdout(textEdit)
|
27 |
|
28 | # Beispiel einer Stdout-Ausgabe (in einer echten Applikation wird print()
|
29 | # natürlich von anderer Stelle aus aufgerufen)
|
30 | for i in range(20):
|
31 | print(i, i*i)
|
32 |
|
33 | sys.exit(app.exec())
|
Anmerkung: Ich bin in Qt nicht bewandert, deswegen kann man das sicher
etwas geschickter machen :)