我使用 QtDesigner 和 pyqt4 来设计我的应用程序。我想在文本编辑中显示 os.system() 函数结果!这是我的代码:
def aiaa(self):
import os
ss = os.system("systemctl status tor.service")
self.textEdit.setText(str(ss))
def setupUi(self, MainWindow):
self.textEdit = QtGui.QTextEdit(self.centralwidget)
self.textEdit.setGeometry(QtCore.QRect(40, 10, 351, 201))
self.textEdit.setObjectName(_fromUtf8("textEdit"))
self.pushButton = QtGui.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(170, 250, 94, 32))
self.pushButton.setObjectName(_fromUtf8("pushButton"))
self.pushButton.clicked.connect(self.aiaa)
但它的显示结果是终端而不是文本编辑。谢谢。。。
您的示例不起作用的原因是os.system
返回命令的退出代码,而不是其输出(仅打印在 stdout 上)。还有其他问题为此提供了一些标准的python解决方案,但是由于您使用的是PyQt。我想我会展示Qt的做事方式。
下面是一个使用QProcess
来运行命令的演示脚本。来自进程的信号连接到一些插槽,然后可以在标准输出和标准输出的输出可用时显示
import sys
from PyQt4 import QtCore, QtGui
class Window(QtGui.QWidget):
def __init__(self):
super(Window, self).__init__()
self.display = QtGui.QTextEdit(self)
self.display.setReadOnly(True)
self.command = QtGui.QLineEdit(self)
self.button = QtGui.QPushButton('Run Command', self)
self.button.clicked.connect(self.handleButton)
layout = QtGui.QVBoxLayout(self)
layout.addWidget(self.display)
layout.addWidget(self.command)
layout.addWidget(self.button)
self.process = QtCore.QProcess(self)
self.process.readyReadStandardOutput.connect(self.handleStdOut)
self.process.readyReadStandardError.connect(self.handleStdErr)
def handleButton(self):
self.process.start(self.command.text())
def handleStdOut(self):
data = self.process.readAllStandardOutput().data()
self.display.append(data.decode('utf-8'))
def handleStdErr(self):
data = self.process.readAllStandardError().data()
self.display.append(data.decode('utf-8'))
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
window = Window()
window.setGeometry(600, 100, 500, 400)
window.command.setText('systemctl status tor.service')
window.show()
sys.exit(app.exec_())