Print out Python console output to Qtextedit
The output consoles produced by Python are written to the program output streams sys.stdout (normal output) and sys.stderr (error output, such as exception tracebacks). In this case we will use 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__
Complete code:
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()
Screenshot:
Comments
-
Nedy Suprianto almost 2 years
I have the output like this, when I press the button:
['VERSION', 'ROMMON', 'HOSTNAME', 'UPTIME', 'RUNNING_IMAGE', 'HARDWARE', 'SERIAL', 'CONFIG_REGISTER']
['12.2(55)SE7', 'Bootstrap', 'Revo-Solusindo-01', '1 hour, 27 minutes', 'c2960s-universalk9-mz.122-55.SE7.bin', ['WS-C2960S-24PD-L'], ['FOC1644Z129'], '0xF'] Write 1 records
['FAN', 'TEMPERATURE', 'TEMPERATURE_VALUE', 'TEMPERATURE_STATE', 'YELLOW_THRESHOLD', 'RED_THRESHOLD', 'POWER', 'RPS']
['OK', 'OK', '33', 'GREEN', '54', '64', '', ''] Write 1 records
['TOTAL', 'FFREE']
['57931776', '29178368']
['524288', '523212'] Write 2 records
['MEMTYPE', 'HEAD', 'TOTAL', 'USED', 'FREE', 'LOW', 'LARGE']
['Processor', '2BA9598', '73910760', '26908308', '47002452', '45367928', '30211716']
[' I/O', '6200000', '14680064', '12406764', '2273300', '2273300', '2273024']
['Driver te', '1A00000', '1048576', '44', '1048532', '1048532', '1048532'] Write 3 records
['CPU_5_SEC', 'CPU_1_MIN', 'CPU_5_MIN']
['10', '10', '9'] Write 1 records
How can I print the output of the background process to Qtextedit?
My code:
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()
-
Nedy Suprianto almost 7 yearshow if i have another function that run similar output like the example above it will automatically added to QLineText?
-
eyllanesc almost 7 yearsExactly, all output you print will be sent to QTextEdit
-
Nedy Suprianto almost 7 yearsOk", its work well.. Thankss btw, with my previously post i know how to calculate the time(each tasks) required.. i'm using time to get how long it's running.. it's right?