stdout "umlenken" Python3

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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.