Imprime la salida de la consola de Python a Qtextedit

Tengo la salida como esta, cuando presiono el botón

[‘VERSION’, ‘ROMMON’, ‘HOSTNAME’, ‘UPTIME’, ‘RUNNING_IMAGE’, ‘HARDWARE’, ‘SERIAL’, ‘CONFIG_REGISTER’]

[’12 .2 (55) SE7 ‘,’ Bootstrap ‘,’ Revo-Solusindo-01 ‘,’ 1 hora, 27 minutos ‘,’ c2960s-universalk9-mz.122-55.SE7.bin ‘, [‘ WS-C2960S -24PD-L ‘], [‘ FOC1644Z129 ‘],’ 0xF ‘] Escriba 1 registros

[‘FAN’, ‘TEMPERATURE’, ‘TEMPERATURE_VALUE’, ‘TEMPERATURE_STATE’, ‘YELLOW_THRESHOLD’, ‘RED_THRESHOLD’, ‘POWER’, ‘RPS’]

[‘OK’, ‘OK’, ’33’, ‘GREEN’, ’54’, ’64’, ”, ”] Escriba 1 registros

[‘TOTAL’, ‘FFREE’]

[‘57931776’, ‘29178368’]

[‘524288’, ‘523212’] Escribe 2 registros

[‘MEMTYPE’, ‘HEAD’, ‘TOTAL’, ‘USED’, ‘FREE’, ‘LOW’, ‘LARGE’]

[‘Procesador’, ‘2BA9598’, ‘73910760’, ‘26908308’, ‘47002452’, ‘45367928’, ‘30211716’]

[‘I / O’, ‘6200000’, ‘14680064’, ‘12406764’, ‘2273300’, ‘2273300’, ‘2273024’]

[‘Driver te’, ‘1A00000’, ‘1048576’, ’44’, ‘1048532’, ‘1048532’, ‘1048532’] Escriba 3 registros

[‘CPU_5_SEC’, ‘CPU_1_MIN’, ‘CPU_5_MIN’]

[’10’, ’10’, ‘9’] Escribir 1 registros

¿Cómo puedo imprimir la salida del proceso en segundo plano a Qtextedit?

mi código :

import sys from PyQt4 import QtGui, QtCore import jtextfsm as textfsm class Window(QtGui.QMainWindow): def __init__(self): super(Window, self).__init__() self.setGeometry(50, 50, 500, 300) self.setWindowTitle("PyQT tuts!") self.setWindowIcon(QtGui.QIcon('pythonlogo.png')) self.home() def home(self): btn = QtGui.QPushButton("Generate", self) btn.clicked.connect(self.TextFSM) btn.resize(100, 50) btn.move(50, 50) process = QtGui.QTextEdit(self) process.moveCursor(QtGui.QTextCursor.Start) process.ensureCursorVisible() process.setLineWrapColumnOrWidth(500) process.setLineWrapMode(QtGui.QTextEdit.FixedPixelWidth) process.setFixedWidth(400) process.setFixedHeight(150) process.move(50,100) self.show() def TextFSM(self): nameFile = 'Switch' try: input_file = open(nameFile + '.txt', encoding='utf-8') # show version raw_text_data = input_file.read() input_file.close() input_file2 = open(nameFile + '.txt', encoding='utf-8') # show env raw_text_data2 = input_file2.read() input_file2.close() input_file3 = open(nameFile + '.txt', encoding='utf-8') # show flash raw_text_data3 = input_file3.read() input_file3.close() input_file4 = open(nameFile + '.txt', encoding='utf-8') # show memory statistic raw_text_data4 = input_file4.read() input_file4.close() input_file5 = open(nameFile + '.txt', encoding='utf-8') # show process cpu raw_text_data5 = input_file5.read() input_file5.close() template = open("show-version.textfsm") # show version re_table = textfsm.TextFSM(template) fsm_results = re_table.ParseText(raw_text_data) template2 = open("show-env.textfsm") # show env re_table2 = textfsm.TextFSM(template2) fsm_results2 = re_table2.ParseText(raw_text_data2) template3 = open("show-flash.textfsm") # show flash re_table3 = textfsm.TextFSM(template3) fsm_results3 = re_table3.ParseText(raw_text_data3) template4 = open("show-memory-statistic.textfsm") # show memory statistic re_table4 = textfsm.TextFSM(template4) fsm_results4 = re_table4.ParseText(raw_text_data4) template5 = open("show-process-cpu.textfsm") # show process cpu re_table5 = textfsm.TextFSM(template5) fsm_results5 = re_table5.ParseText(raw_text_data5) outfile_name = open(nameFile + "-show-version.csv", "w+") # show version outfile = outfile_name outfile_name2 = open(nameFile + "-show-env.csv", "w+") # show env outfile2 = outfile_name2 outfile_name3 = open(nameFile + "-show-flash.csv", "w+") # show flash outfile3 = outfile_name3 outfile_name4 = open(nameFile + "-show-memory-statistic.csv", "w+") # show memory statistic outfile4 = outfile_name4 outfile_name5 = open(nameFile + "-show-process-cpu.csv", "w+") # show process cpu outfile5 = outfile_name5 print(re_table.header) # show version for s in re_table.header: outfile.write("%s;" % s) outfile.write("\n") counter = 0 for row in fsm_results: # show version print(row) for s in row: outfile.write("%s;" % s) outfile.write("\n") counter += 1 print("Write %d records" % counter) print(re_table2.header) # show env for s in re_table2.header: outfile2.write("%s;" % s) outfile2.write("\n") counter = 0 for row in fsm_results2: # show env print(row) for s in row: outfile2.write("%s;" % s) outfile2.write("\n") counter += 1 print("Write %d records" % counter) print(re_table3.header) # show flash for s in re_table3.header: outfile3.write("%s;" % s) outfile3.write("\n") counter = 0 for row in fsm_results3: # show flash print(row) for s in row: outfile3.write("%s;" % s) outfile3.write("\n") counter += 1 print("Write %d records" % counter) print(re_table4.header) # show memory statistics for s in re_table4.header: outfile4.write("%s;" % s) outfile4.write("\n") counter = 0 for row in fsm_results4: # show memory statistics print(row) for s in row: outfile4.write("%s;" % s) outfile4.write("\n") counter += 1 print("Write %d records" % counter) print(re_table5.header) # show process cpu for s in re_table5.header: outfile5.write("%s;" % s) outfile5.write("\n") counter = 0 for row in fsm_results5: # show process cpu print(row) for s in row: outfile5.write("%s;" % s) outfile5.write("\n") counter += 1 print("Write %d records" % counter) except IOError: print("Error: There Have File does not appear to exist.") QtGui.QMessageBox.question(self, 'Warning', "ERROR:Please check you're '.txt' file and TextFSM File.") def run(): app = QtGui.QApplication(sys.argv) GUI = Window() sys.exit(app.exec_()) run() 

Las consolas de salida producidas por Python se escriben en las secuencias de salida del progtwig sys.stdout (salida normal) y sys.stderr (salida de error, como las trazas de excepción). En este caso utilizaremos stdout.

 class Stream(QtCore.QObject): newText = QtCore.pyqtSignal(str) def write(self, text): self.newText.emit(str(text)) class Window(QtGui.QMainWindow): def __init__(self): super(Window, self).__init__() self.setGeometry(50, 50, 500, 300) self.setWindowTitle("PyQT tuts!") self.setWindowIcon(QtGui.QIcon('pythonlogo.png')) self.home() sys.stdout = Stream(newText=self.onUpdateText) def onUpdateText(self, text): cursor = self.process.textCursor() cursor.movePosition(QtGui.QTextCursor.End) cursor.insertText(text) self.process.setTextCursor(cursor) self.process.ensureCursorVisible() def __del__(self): sys.stdout = sys.__stdout__ 

Código completo:

 import sys from PyQt4 import QtGui, QtCore import jtextfsm as textfsm class Stream(QtCore.QObject): newText = QtCore.pyqtSignal(str) def write(self, text): self.newText.emit(str(text)) class Window(QtGui.QMainWindow): def __init__(self): super(Window, self).__init__() self.setGeometry(50, 50, 500, 300) self.setWindowTitle("PyQT tuts!") self.setWindowIcon(QtGui.QIcon('pythonlogo.png')) self.home() sys.stdout = Stream(newText=self.onUpdateText) def onUpdateText(self, text): cursor = self.process.textCursor() cursor.movePosition(QtGui.QTextCursor.End) cursor.insertText(text) self.process.setTextCursor(cursor) self.process.ensureCursorVisible() def __del__(self): sys.stdout = sys.__stdout__ def home(self): w = QtGui.QWidget() self.setCentralWidget(w) lay = QtGui.QVBoxLayout(w) btn = QtGui.QPushButton("Generate") btn.clicked.connect(self.TextFSM) self.process = QtGui.QTextEdit() self.process.moveCursor(QtGui.QTextCursor.Start) self.process.ensureCursorVisible() self.process.setLineWrapColumnOrWidth(500) self.process.setLineWrapMode(QtGui.QTextEdit.FixedPixelWidth) lay.addWidget(btn) lay.addWidget(self.process) self.show() def TextFSM(self): nameFile = 'Switch' try: input_file = open(nameFile + '.txt', encoding='utf-8') # show version raw_text_data = input_file.read() input_file.close() input_file2 = open(nameFile + '.txt', encoding='utf-8') # show env raw_text_data2 = input_file2.read() input_file2.close() input_file3 = open(nameFile + '.txt', encoding='utf-8') # show flash raw_text_data3 = input_file3.read() input_file3.close() input_file4 = open(nameFile + '.txt', encoding='utf-8') # show memory statistic raw_text_data4 = input_file4.read() input_file4.close() input_file5 = open(nameFile + '.txt', encoding='utf-8') # show process cpu raw_text_data5 = input_file5.read() input_file5.close() template = open("show-version.textfsm") # show version re_table = textfsm.TextFSM(template) fsm_results = re_table.ParseText(raw_text_data) template2 = open("show-env.textfsm") # show env re_table2 = textfsm.TextFSM(template2) fsm_results2 = re_table2.ParseText(raw_text_data2) template3 = open("show-flash.textfsm") # show flash re_table3 = textfsm.TextFSM(template3) fsm_results3 = re_table3.ParseText(raw_text_data3) template4 = open("show-memory-statistic.textfsm") # show memory statistic re_table4 = textfsm.TextFSM(template4) fsm_results4 = re_table4.ParseText(raw_text_data4) template5 = open("show-process-cpu.textfsm") # show process cpu re_table5 = textfsm.TextFSM(template5) fsm_results5 = re_table5.ParseText(raw_text_data5) outfile_name = open(nameFile + "-show-version.csv", "w+") # show version outfile = outfile_name outfile_name2 = open(nameFile + "-show-env.csv", "w+") # show env outfile2 = outfile_name2 outfile_name3 = open(nameFile + "-show-flash.csv", "w+") # show flash outfile3 = outfile_name3 outfile_name4 = open(nameFile + "-show-memory-statistic.csv", "w+") # show memory statistic outfile4 = outfile_name4 outfile_name5 = open(nameFile + "-show-process-cpu.csv", "w+") # show process cpu outfile5 = outfile_name5 print(re_table.header) # show version for s in re_table.header: outfile.write("%s;" % s) outfile.write("\n") counter = 0 for row in fsm_results: # show version print(row) for s in row: outfile.write("%s;" % s) outfile.write("\n") counter += 1 print("Write %d records" % counter) print(re_table2.header) # show env for s in re_table2.header: outfile2.write("%s;" % s) outfile2.write("\n") counter = 0 for row in fsm_results2: # show env print(row) for s in row: outfile2.write("%s;" % s) outfile2.write("\n") counter += 1 print("Write %d records" % counter) print(re_table3.header) # show flash for s in re_table3.header: outfile3.write("%s;" % s) outfile3.write("\n") counter = 0 for row in fsm_results3: # show flash print(row) for s in row: outfile3.write("%s;" % s) outfile3.write("\n") counter += 1 print("Write %d records" % counter) print(re_table4.header) # show memory statistics for s in re_table4.header: outfile4.write("%s;" % s) outfile4.write("\n") counter = 0 for row in fsm_results4: # show memory statistics print(row) for s in row: outfile4.write("%s;" % s) outfile4.write("\n") counter += 1 print("Write %d records" % counter) print(re_table5.header) # show process cpu for s in re_table5.header: outfile5.write("%s;" % s) outfile5.write("\n") counter = 0 for row in fsm_results5: # show process cpu print(row) for s in row: outfile5.write("%s;" % s) outfile5.write("\n") counter += 1 print("Write %d records" % counter) except IOError: print("Error: There Have File does not appear to exist.") QtGui.QMessageBox.question(self, 'Warning', "ERROR:Please check you're '.txt' file and TextFSM File.") def run(): app = QtGui.QApplication(sys.argv) GUI = Window() sys.exit(app.exec_()) run() 

Captura de pantalla:

introduzca la descripción de la imagen aquí