import sys from cStringIO import StringIO from PyQt4.QtCore import * from PyQt4.QtGui import * from sface.config import config import time class LogIO(QObject): def __init__(self, parent, old_stdout): QObject.__init__(self, parent) self.io = StringIO() self.old_stdout = old_stdout def write(self, txt): self.io.write(txt) self.parent().update() def getText(self): self.old_stdout.write("getText: ENTERING\n") val = self.io.getvalue() # looks like there is no other way # to empty the StringIO del self.io self.io = StringIO() self.old_stdout.write("getText: GOT VALUE\n") self.old_stdout.write(val + "\n") return val class LogWindow(QDialog): def __init__(self, parent=None): QWidget.__init__(self, parent) self.setWindowTitle("SFI Log") self.text = QTextBrowser(self) self.text.ensureCursorVisible() layout = QVBoxLayout() layout.addWidget(self.text) self.setLayout(layout) self.logio = LogIO(self, sys.stdout) def redirectOutput(self): print "\n\nRedirecting all output to Log Window. Please open the log window to see the output\n" self.old_stdout = sys.stdout self.old_stderr = sys.stderr sys.stdout = self.logio sys.stderr = self.logio def update(self): #starttime = time.time() #self.logio.old_stdout.write("update: entering\n")#.flush() #self.logio.old_stdout.write('one\n')#.flush() self.text.insertPlainText(self.logio.getText()) #self.logio.old_stdout.write('two\n')#.flush() c = self.text.textCursor() #self.logio.old_stdout.write('three\n')#.flush() c.movePosition(QTextCursor.End) #self.logio.old_stdout.write('four\n')#.flush() self.text.setTextCursor(c) #self.logio.old_stdout.write('five\n')#.flush() #self.logio.old_stdout.write("update: done \n")# + time.strftime(('%M:%S'),"[%.3f s]"%(time.time() - starttime)))#.flush()