Forum: PC-Programmierung stdout "umlenken" Python3


von Matthias R. (mons)


Lesenswert?

Hallo,
gibt es eine Möglichkeit die Standartterminal Ausgabe in ein Textwidget 
(PyQt4)umzuleiten?
Das ganze in Python3 ;)

Danke :)

von Yalu X. (yalu) (Moderator)


Lesenswert?

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 :)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.