簡體   English   中英

將文本附加到stdout並將其傳遞給QTextBrowser

[英]Append text to stdout and pass it to a QTextBrowser

我試圖在我的PyQt(pyqtgraph)應用程序中同時顯示stdout和stderr。 如果我遵循費迪南德·拜爾(Ferdinand Beyer)對這個問題的回答,那么我可以這樣做。

但是,當我嘗試通過更改write()函數中的文本在stdout之前附加時間戳時

new_text = '{}> {}'.format(time.strftime('%X'), old_text)

我在stdout消息之前之后獲得了時間戳記。 我對此行為感到困惑,無法弄清它為什么會發生以及如何預防。

更新:我的代碼直接:

from pyqtgraph.Qt import QtGui,QtCore
from pyqtgraph.dockarea import DockArea,Dock
import pyqtgraph as pg
import sys
import time

app = QtGui.QApplication([])
win = QtGui.QMainWindow()
win.resize(300,300)
area = DockArea()
win.setCentralWidget(area)
d1 = Dock("cmd output", size=(300,300))
area.addDock(d1)

w1 = pg.LayoutWidget()
gui_cmd_bw = QtGui.QTextBrowser()
w1.addWidget(gui_cmd_bw,0,0)

d1.addWidget(w1)

class EmittingStream(QtCore.QObject):

    textWritten = QtCore.pyqtSignal(str)

    def write(self, text):
        self.textWritten.emit(str(text))        

def normalOutputWritten(text):
    """Append text to the QTextEdit."""
    # this works without problems.
    #gui_cmd_bw.insertPlainText(text)
    timestamp = '{}> '.format(time.strftime('%X'))
    # this adds timestamp before and after the stdout
    gui_cmd_bw.insertPlainText(timestamp+text)
    # this produces similar result
    #gui_cmd_bw.append(timestamp+text)

# cmd output to application browser
sys.stdout = EmittingStream(textWritten=normalOutputWritten)
sys.stderr = EmittingStream(textWritten=normalOutputWritten)

win.show()
if __name__ == '__main__':    
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
        print('stdout text')        
        QtGui.QApplication.instance().exec_()

最終輸出如下所示:

14:15:16> stdout text
14:15:16> 

我找到了解決問題的快速方法,對我來說足夠了。

由於print()函數為每個輸出調用sys.stdout.write()兩次,因此我添加了條件來檢查此輸出是否不為空。

def normalOutputWritten(text):
    """Append text to the QTextEdit."""       
    timestamp = '{}> '.format(time.strftime('%X'))    

   if len(text)>1:
        text = timestamp+text

   gui_cmd_bw.insertPlainText(text) 

這將刪除第二個時間戳。 當然,一個符號輸出將缺少時間戳。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM