Я работал с кучей примеров I Googled и смотрел на кучу вопросов о потоковом использовании здесь, в stackoverflow, но я все еще не могу его получить.Python/PyQt/Qt Threading: Как распечатать stdout/stderr сразу?
Вот некоторые примеры кода я работаю с:
class Debugger(QTextBrowser):
def __init__(self, parent):
super(Debugger, self).__init__(parent)
sys.stdout = self
def write(self, text):
self.moveCursor(QTextCursor.End)
self.textCursor().insertText(text)
В принципе, я пытаюсь поймать каких-либо заявлений «Печать» или другие формы записи в stdoutstream. Но я не могу заставить его печатать их один за другим по мере их поступления. Вместо этого он ждет, пока какой-либо процесс, который печатает строки, не будет завершен, а затем начнет регистрировать информацию. Итак, как мне это правильно нарисовать?
Редактировать: Уменьшенный код до минимума.
Я не уверен, но я подозреваю, что здесь происходит то, что 'write' to 'STDOUT' или что-то еще записано в примечании, пока поток не будет' flush() 'd. В этом случае, если ваш собственный код выполняет запись, убедитесь, что вы вызываете 'flush()' в потоке, как только вы пишете на него, если это код клиента, вам просто нужно подождать. – snim2
Это не проблема. Я попробовал следующее: 1) добавил 'self.oldstdout = sys.stdout' в' Debugger .__ init' 2) добавил 'self.console.oldstdout.write (text)' в 'StdoutStream.write'. И это произошло: пульт python сразу напечатал строки, но отладчик QTextBrowser дождался завершения всего процесса. – Jeff
Возможный дубликат http://stackoverflow.com/questions/2859256/how-to-redirect-a-python-console-output-to-a-qtextbox – synthesizerpatel