2017-01-01 68 views
0

我使用QtDesigner和pyqt4来设计我的应用程序。 我想在文本编辑器中显示os.system()函数结果! 这里是我的代码:如何在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) 

但其结果显示在终端没有在文本编辑。 谢谢...

+0

你不能用'os.system'。请参阅[将os.system的输出分配给变量并阻止它显示在屏幕上](http://stackoverflow.com/questions/3503879/assign-output-of-os-system-to-a-variable-并防止它被显示在) – fredtantini

+0

谢谢@fredtantini – amirrezaw

回答

0

你的例子不起作用的原因是因为os.system返回命令的退出代码,而不是它的输出(它只是在stdout上打印)。有other questions这给了一些标准的python解决方案,但是因为你使用的是PyQt。我想我会展示Qt做事的方式。

以下是使用QProcess来运行命令的演示脚本。从处理信号被连接到一些槽,然后可以显示从stdout和stderr输出每当它们变得可用:

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_()) 
+0

感谢它的工作!:D – amirrezaw

+0

@amirrezaw。大!如果您发现答案有用,请接受它(即单击tick synbol)。 – ekhumoro

相关问题