2017-01-01 10 views
0

Я использую QtDesigner и pyqt4 для разработки своего приложения. Я хочу показать, что функция os.system() вызывает textEdit! вот мой код:Как показать os.system() в textEdit в pyqt4

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) 

но показать результат в терминале не в TextEdit. 0 ...

+0

вы не можете с 'os.system'. См. [Назначение вывода переменной os.system переменной и предотвращение ее отображения на экране] (http://stackoverflow.com/questions/3503879/assign-output-of-os-system-to-a-variable- and-prevent-it-from-being-visible-on) – fredtantini

+0

Спасибо @fredtantini – amirrezaw

ответ

0

Причина, по которой ваш пример не будет работать, заключается в том, что os.system возвращает код выхода команды, а не ее выход (который только что напечатан на stdout). Есть other questions, которые дают некоторые стандартные решения для 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_()) 
+0

Спасибо, что это работает!: D – amirrezaw

+0

@amirrezaw. Большой! Если вы нашли ответ полезным, пожалуйста, примите его (т. Е. Нажмите на галочку). – ekhumoro