我正在尝试将一个被调用脚本的输出打印到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_())
答案 0 :(得分:0)
尝试将您的打印声明更改为:
case WM_CREATE:
loadPictures(); /// Calling the Images function in Create
parentControls(hWnd);
break;
输出的类型为'bytes',需要进行解码以转换为字符串以进行正确格式化。