如何在没有额外" / n"的情况下将外部脚本的输出打印到PyQt gui窗口字符

时间:2018-01-06 15:42:43

标签: python pyqt5

我正在尝试将一个被调用脚本的输出打印到PyQt5 gui的窗口。我已经能够成功地使用子进程来让脚本执行被调用的脚本,但它正在打印字符" / n"在被调用脚本中的每个print语句之间。

ex:b' stuffz \ nhere是另一个阵容\ ncool!\ nhello worldt!\ n \ n \ n什么是什么?\ n什么是什么?\ n什么是什么?\ n什么是什么?\ n'

任何人都可以帮我弄清楚如何让我的代码只是以我直接运行时显示的确切格式显示被调用的脚本输出(hellworld_final.py)吗?

或者,如果有人有更好的方法来调用外部脚本并在PyQt gui中将脚本的输出显示为文本,我将非常感激。在此先感谢您的帮助!

这是我目前的代码:

helloworld_final.py

def cooz():
    print ('hello worldt!')

def tooz():
    print ("here is another linet")
    print ("cool!")

print ("stuffz")
tooz()
cooz()

print ()
print ()

print ("What what?")
print ("What what?")

pyqt_gui_test3.py

import sys
import os
import subprocess
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QWidget, QApplication


class MyStream(QtCore.QObject):
    message = QtCore.pyqtSignal(str)
    def __init__(self, parent=None):
        super(MyStream, self).__init__(parent)

    def write(self, message):
        self.message.emit(str(message))

class MyWindow(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(MyWindow, self).__init__(parent)

        self.pushButtonPrint = QtWidgets.QPushButton(self)
        self.pushButtonPrint.setText("Click Me!")

self.pushButtonPrint.clicked.connect(self.on_pushButtonPrint_clicked)

        self.textEdit = QtWidgets.QTextEdit(self)

        self.layoutVertical = QtWidgets.QVBoxLayout(self)
        self.layoutVertical.addWidget(self.pushButtonPrint)
        self.layoutVertical.addWidget(self.textEdit)

    @QtCore.pyqtSlot()
    def on_pushButtonPrint_clicked(self):
        cmd = 'python /users/cmbp/p4e/helloworld_final.py'

        # execute script
        output = subprocess.check_output(cmd, shell=True)
        print (output)

    @QtCore.pyqtSlot(str)
    def on_myStream_message(self, message):
        self.textEdit.moveCursor(QtGui.QTextCursor.End)
        self.textEdit.insertPlainText(message)

if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    app.setApplicationName('MyWindow')

    main = MyWindow()
    main.show()

    myStream = MyStream()
    myStream.message.connect(main.on_myStream_message)

    sys.stdout = myStream
    sys.exit(app.exec_())

1 个答案:

答案 0 :(得分:0)

尝试将您的打印声明更改为:

case WM_CREATE:
    loadPictures();    /// Calling the Images function in Create
    parentControls(hWnd);
    break;

输出的类型为'bytes',需要进行解码以转换为字符串以进行正确格式化。