pythhon_周报收集&excel
# -*- coding: utf-8 -*- """ Module implementing Form. """ import sys from xlwt import Workbook import datetime import requests from requests.auth import HTTPDigestAuth from xmltodict import parse from PyQt5.QtWidgets import QApplication,QWidget from PyQt5.QtCore import pyqtSlot from PyQt5 import QtCore, QtGui, QtWidgets #Ui_Form类是PYQT5的UI设计窗口 class Ui_Form(object): def setupUi(self, Form): Form.setObjectName("Form") Form.resize(997, 524) self.pushButton = QtWidgets.QPushButton(Form) self.pushButton.setGeometry(QtCore.QRect(440, 170, 111, 31)) self.pushButton.setObjectName("pushButton") self.lineEdit = QtWidgets.QLineEdit(Form) self.lineEdit.setGeometry(QtCore.QRect(440, 70, 121, 21)) self.lineEdit.setObjectName("lineEdit") self.lineEdit_2 = QtWidgets.QLineEdit(Form) self.lineEdit_2.setGeometry(QtCore.QRect(440, 120, 121, 21)) self.lineEdit_2.setEchoMode(QtWidgets.QLineEdit.Password) self.lineEdit_2.setObjectName("lineEdit_2") self.textBrowser = QtWidgets.QTextBrowser(Form) self.textBrowser.setGeometry(QtCore.QRect(40, 250, 901, 201)) self.textBrowser.setObjectName("textBrowser") self.label = QtWidgets.QLabel(Form) self.label.setGeometry(QtCore.QRect(370, 80, 54, 12)) self.label.setObjectName("label") self.label_2 = QtWidgets.QLabel(Form) self.label_2.setGeometry(QtCore.QRect(370, 120, 61, 21)) self.label_2.setObjectName("label_2") self.horizontalLayoutWidget = QtWidgets.QWidget(Form) self.horizontalLayoutWidget.setGeometry(QtCore.QRect(40, 190, 896, 101)) self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget") self.horizontalLayout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget) self.horizontalLayout.setContentsMargins(0, 0, 0, 0) self.horizontalLayout.setObjectName("horizontalLayout") self.label_3 = QtWidgets.QLabel(self.horizontalLayoutWidget) self.label_3.setObjectName("label_3") self.horizontalLayout.addWidget(self.label_3) self.label_4 = QtWidgets.QLabel(self.horizontalLayoutWidget) self.label_4.setObjectName("label_4") self.horizontalLayout.addWidget(self.label_4) self.label_6 = QtWidgets.QLabel(self.horizontalLayoutWidget) self.label_6.setObjectName("label_6") self.horizontalLayout.addWidget(self.label_6) self.label_7 = QtWidgets.QLabel(self.horizontalLayoutWidget) self.label_7.setObjectName("label_7") self.horizontalLayout.addWidget(self.label_7) self.label_8 = QtWidgets.QLabel(self.horizontalLayoutWidget) self.label_8.setObjectName("label_8") self.horizontalLayout.addWidget(self.label_8) self.label_9 = QtWidgets.QLabel(self.horizontalLayoutWidget) self.label_9.setObjectName("label_9") self.horizontalLayout.addWidget(self.label_9) self.label_10 = QtWidgets.QLabel(self.horizontalLayoutWidget) self.label_10.setObjectName("label_10") self.horizontalLayout.addWidget(self.label_10) self.label_11 = QtWidgets.QLabel(self.horizontalLayoutWidget) self.label_11.setObjectName("label_11") self.horizontalLayout.addWidget(self.label_11) self.label_12 = QtWidgets.QLabel(self.horizontalLayoutWidget) self.label_12.setObjectName("label_12") self.horizontalLayout.addWidget(self.label_12) self.label_13 = QtWidgets.QLabel(self.horizontalLayoutWidget) self.label_13.setObjectName("label_13") self.horizontalLayout.addWidget(self.label_13) self.label_14 = QtWidgets.QLabel(self.horizontalLayoutWidget) self.label_14.setObjectName("label_14") self.horizontalLayout.addWidget(self.label_14) self.label_15 = QtWidgets.QLabel(self.horizontalLayoutWidget) self.label_15.setObjectName("label_15") self.horizontalLayout.addWidget(self.label_15) self.label_16 = QtWidgets.QLabel(self.horizontalLayoutWidget) self.label_16.setObjectName("label_16") self.horizontalLayout.addWidget(self.label_16) self.label_17 = QtWidgets.QLabel(self.horizontalLayoutWidget) self.label_17.setObjectName("label_17") self.horizontalLayout.addWidget(self.label_17) self.lineEdit_3 = QtWidgets.QLineEdit(Form) self.lineEdit_3.setGeometry(QtCore.QRect(440, 30, 121, 21)) self.lineEdit_3.setObjectName("lineEdit_3") self.label_5 = QtWidgets.QLabel(Form) self.label_5.setGeometry(QtCore.QRect(370, 30, 54, 12)) self.label_5.setObjectName("label_5") self.label_18 = QtWidgets.QLabel(Form) self.label_18.setGeometry(QtCore.QRect(780, 0, 181, 81)) self.label_18.setObjectName("label_18") self.retranslateUi(Form) QtCore.QMetaObject.connectSlotsByName(Form) def retranslateUi(self, Form): _translate = QtCore.QCoreApplication.translate Form.setWindowTitle(_translate("Form", "云运维中心-周报资源收集(CAS)v0.1")) self.pushButton.setText(_translate("Form", "开始收集")) self.label.setText(_translate("Form", "CAS帐号")) self.label_2.setText(_translate("Form", "CAS密码")) self.label_3.setText(_translate("Form", "可用域")) self.label_4.setText(_translate("Form", "CPU可用量")) self.label_6.setText(_translate("Form", "CPU分配量")) self.label_7.setText(_translate("Form", "CPU分配比")) self.label_8.setText(_translate("Form", "内存可用量")) self.label_9.setText(_translate("Form", "内存分配量")) self.label_10.setText(_translate("Form", "内存分配比例")) self.label_11.setText(_translate("Form", "存储总量")) self.label_12.setText(_translate("Form", "存储分配")) self.label_13.setText(_translate("Form", "存储分配比例")) self.label_14.setText(_translate("Form", "存储实际可用")) self.label_15.setText(_translate("Form", "存储实际利用率")) self.label_16.setText(_translate("Form", "虚拟机数量")) self.label_17.setText(_translate("Form", "CVK数量")) self.label_5.setText(_translate("Form", "CAS IP")) self.label_18.setText(_translate("Form", "注意:\n" " 1.确保和CAS的通信正常。\n" " 2.虚拟机越多收集时间越慢。\n" " 3.尽量避开业务高峰期使用。\n" " 4.不要短时间内频繁使用。")) #From是PYQT5展示窗口 class Form(QWidget, Ui_Form): """ Class documentation goes here. """ # zhoubaoshouji_str = pyqtSignal(str) def __init__(self,parent=None): """ Constructor @param parent reference to the parent widget @type QWidget """ super(Form, self).__init__(parent) self.setupUi(self) # self.auth_url = auth_url def auth(self,auth_url):#每次获取CAS API接口需要认证一次 auth_url = "http://"+self.lineEdit_3.text()+auth_url auth_request = requests.get(auth_url, auth=HTTPDigestAuth(self.lineEdit.text(), self.lineEdit_2.text())) # print(auth_request.status_code)#判断是否认证通过 auth_parse = parse(auth_request.text) # auth_parse = str(auth_parse) # print(auth_parse) return auth_parse # def print_test(self): # # print("print_test") # a = self.lineEdit.text() # a = str(a) # return a @pyqtSlot() def on_pushButton_clicked(self):#UI窗口中的按钮触发按钮 """ Slot documentation goes here. """ # TODO: not implemented yet self.shouji()#调用事件的主体函数 def cas_excel_muban(self):#新建excel模板表格 cas_shouji_muban = ["可用域","CPU可用量","CPU已分配量","CPU已分配比例","物理内存可用量","物理内存已分配量", "物理内存已分配比例","存储总量","存储已分配容量","存储已分配比例","存储实际可用量", "存储实际利用率","虚拟机数量","CVK数量","裸金属服务器数量",] self.cas_shouji = Workbook(encoding='utf-8') self.sheet1 = self.cas_shouji.add_sheet('CAS可用域信息收集') for i in range(len(cas_shouji_muban)): self.sheet1.write(0,i,cas_shouji_muban[i]) def insert_cas_excel_muban(self,y,x_list):#把结果插入相应的excel模板中 for i in range(len(x_list)): self.sheet1.write(y,i,x_list[i]) def save_cas_excel_muban(self):#把之前插入的表格按照指定的方式保存在C盘,因为发现指定用户运行环境路径去保存会有问题,目前发现的是路径中有中文,所以就指定C盘 now_time = datetime.datetime.now() now_time_year = now_time.strftime('%Y-%m-%d') now_time_H = now_time.strftime('%H') now_time_M = now_time.strftime('%M') now_time_S = now_time.strftime('%S') # cas_shouji_path = sys.path[0] + "\cas收集({},{}时{}分{}秒).xlsx".format(now_time_year,now_time_H,now_time_M,now_time_S) cas_shouji_path = "C:" + "\cas收集({},{}时{}分{}秒).xlsx".format(now_time_year,now_time_H,now_time_M,now_time_S) self.cas_shouji.save(cas_shouji_path) def shouji(self):#整个py中的事件的主题,所有接口的获取和处理都在这里面 # shouji_str_list = [] y_num = 1 self.cas_excel_muban() hostpool_name_auth = self.auth(":8080/cas/casrs/hostpool/all")#先获取主机池的接口信息拿到主机池 ID hostpool_name_list = hostpool_name_auth['list']['hostPool'] if type(hostpool_name_list) is list:#遍历主机池获取信息 for i in range(len(hostpool_name_list)): QApplication.processEvents()#pyqt5中通过次方法解决程序UI等待后台执行过程中出现程序等待时间过长出现的“未响应”的问题,可以理解刷新界面 hostpool_name = hostpool_name_auth['list']['hostPool'][i]['name'] hostpool_id = hostpool_name_auth['list']['hostPool'][i]['id'] hostpool_info_summary_auth = self.auth(":8080/cas/casrs/hostpool/summary/{}".format(hostpool_id)) hostpool_cvk_total = int(hostpool_info_summary_auth['list']['keyValue'][0]['value']) hostpool_cpu_total = int(hostpool_info_summary_auth['list']['keyValue'][1]['value']) hostpool_mem_total = hostpool_info_summary_auth['list']['keyValue'][2]['value'] if "TB" in hostpool_mem_total: hostpool_mem_total = str(hostpool_mem_total).replace("TB","") hostpool_mem_total = float(hostpool_mem_total) * 1024 hostpool_mem_total = int(hostpool_mem_total//1) else: hostpool_mem_total = str(hostpool_mem_total).replace("GB","") hostpool_mem_total = float(hostpool_mem_total) hostpool_mem_total = int(hostpool_mem_total//1) hostpool_vm_total = int(hostpool_info_summary_auth['list']['keyValue'][5]['value']) # print( hostpool_cvk_total,hostpool_cpu_total,hostpool_mem_total, hostpool_vm_total) if int(hostpool_vm_total) == 0:#防止主机池下没有虚拟机的场景 QApplication.processEvents() hostpool_vm_cpu_use = 0 hostpool_vm_cpu_per = 0 hostpool_vm_mem_use = 0 hostpool_vm_mem_per = 0 hostpool_vm_stor_beifenpei = 0 hostpool_vm_stor_beifenpei_per = 0 hostpool_cvk_stor_free = 0 hostpool_vm_stor_acutal_per = 0 hostpool_vm_total = 0 hostpool_vm_auth = self.auth(":8080/cas/casrs/hostpool/host/{}?&offset=0&limit=50".format(hostpool_id)) hostpool_cvk_id = hostpool_vm_auth['list']['host']['id'] else: #获取主机池下虚拟机信息 hostpool_vm_auth = self.auth(":8080/cas/casrs/vm/vmList?hpId={}".format(hostpool_id)) hostpool_vm_auth_list = hostpool_vm_auth['list']['domain'] hostpool_vm_cpu_use = 0 hostpool_vm_mem_use = 0 hostpool_vm_stor_beifenpei = 0 for i in range(len(hostpool_vm_auth_list)): vm_stor = 0 QApplication.processEvents() hostpool_cvk_id = hostpool_vm_auth['list']['domain'][0]['hostId'] hostpool_vm_cpu = int(hostpool_vm_auth['list']['domain'][i]['cpu']) hostpool_vm_mem = int(hostpool_vm_auth['list']['domain'][i]['memory']) hostpool_vm_id = int(hostpool_vm_auth['list']['domain'][i]['id']) # 下面是通过遍历所有主机池的虚拟机详细信息,拿到磁盘的分配大小,但是太消耗时间了。 hostpool_vm_detail_auth = self.auth(":8080/cas/casrs/vm/{}".format(hostpool_vm_id)) # print(hostpool_vm_detail_auth) if type(hostpool_vm_detail_auth['domain']['storage']) is list: for i in range(len(hostpool_vm_detail_auth['domain']['storage'])): vm_stor = vm_stor + float(hostpool_vm_detail_auth['domain']['storage'][i]['capacity']) # print(vm_stor) else: vm_stor = float(hostpool_vm_detail_auth['domain']['storage']['capacity']) # print(vm_stor) hostpool_vm_cpu_use =hostpool_vm_cpu_use + hostpool_vm_cpu hostpool_vm_mem_use = hostpool_vm_mem_use + hostpool_vm_mem hostpool_vm_stor_beifenpei = hostpool_vm_stor_beifenpei + vm_stor QApplication.processEvents() # hostpool_vm_stor_beifenpei_per = hostpool_vm_stor_beifenpei hostpool_vm_stor_beifenpei = int(hostpool_vm_stor_beifenpei//1024) # hostpool_vm_stor_beifenpei = int(hostpool_vm_stor_beifenpei//1) hostpool_vm_mem_use = int(hostpool_vm_mem_use//1024) hostpool_vm_cpu_per = hostpool_vm_cpu_use/float(hostpool_cpu_total) hostpool_vm_cpu_per = round(hostpool_vm_cpu_per*100,2) # hostpool_vm_cpu_per = str(hostpool_vm_cpu_per * 100) + "%" hostpool_vm_mem_per = hostpool_vm_mem_use/float(hostpool_mem_total) hostpool_vm_mem_per = round(hostpool_vm_mem_per*100,2) # hostpool_vm_mem_per = str(hostpool_vm_mem_per* 100) + "%" hostpool_cvk_auth = self.auth(":8080/cas/casrs/host/id/{}/storage".format(hostpool_cvk_id))#只有该接口获取主机池共享存储。 if hostpool_cvk_auth['list'] == None:#放置改CVK的只有一个共享存储的场景, hostpool_cvk_stor_total = 0 hostpool_cvk_stor_free = 0 hostpool_vm_stor_beifenpei_per = 0 hostpool_vm_stor_acutal_per = 0 else: hostpool_cvk_list = hostpool_cvk_auth['list']['storagePool'] hostpool_cvk_stor_total = 0 hostpool_cvk_stor_free = 0 if type(hostpool_cvk_list) is list: for i in range(len(hostpool_cvk_list)): hostpool_cvk_stor_total = hostpool_cvk_stor_total + int(hostpool_cvk_list[i]['totalSize']) hostpool_cvk_stor_free = hostpool_cvk_stor_free + int(hostpool_cvk_list[i]['freeSize']) else: hostpool_cvk_stor_total = int(hostpool_cvk_list['totalSize']) hostpool_cvk_stor_free = int(hostpool_cvk_list['freeSize']) QApplication.processEvents() hostpool_cvk_stor_total = int(hostpool_cvk_stor_total//1024) hostpool_cvk_stor_free = int(hostpool_cvk_stor_free//1024) hostpool_vm_stor_beifenpei_per = hostpool_vm_stor_beifenpei/float(hostpool_cvk_stor_total) hostpool_vm_stor_beifenpei_per = round(hostpool_vm_stor_beifenpei_per*100,2) hostpool_vm_stor_acutal_per = (hostpool_cvk_stor_total-hostpool_cvk_stor_free)/float(hostpool_cvk_stor_total) hostpool_vm_stor_acutal_per = round(hostpool_vm_stor_acutal_per*100,2) shouji_str = "{} {} {} {:.2f}% {} {} {:.2f}% {} {} {:.2f}% {} {:.2f}% {} {}".format(hostpool_name,hostpool_cpu_total,hostpool_vm_cpu_use,hostpool_vm_cpu_per,hostpool_mem_total, hostpool_vm_mem_use,hostpool_vm_mem_per,hostpool_cvk_stor_total,hostpool_vm_stor_beifenpei, hostpool_vm_stor_beifenpei_per,hostpool_cvk_stor_free,hostpool_vm_stor_acutal_per,hostpool_vm_total, hostpool_cvk_total) hostpool_vm_cpu_per_str = str(hostpool_vm_cpu_per)+"%" hostpool_vm_mem_per_str = str(hostpool_vm_mem_per)+"%" hostpool_vm_stor_beifenpei_per_str = str(hostpool_vm_stor_beifenpei_per)+"%" hostpool_vm_stor_acutal_per_str = str(hostpool_vm_stor_acutal_per)+"%" cas_shouji_list = [hostpool_name,hostpool_cpu_total,hostpool_vm_cpu_use,hostpool_vm_cpu_per_str,hostpool_mem_total, hostpool_vm_mem_use,hostpool_vm_mem_per_str,hostpool_cvk_stor_total,hostpool_vm_stor_beifenpei, hostpool_vm_stor_beifenpei_per_str,hostpool_cvk_stor_free,hostpool_vm_stor_acutal_per_str,hostpool_vm_total, hostpool_cvk_total] print(cas_shouji_list) # print(shouji_str) # shouji_str_list.append(shouji_str) QApplication.processEvents() self.textBrowser.append(shouji_str) # print(y_num,cas_shouji_list) self.insert_cas_excel_muban(y_num,cas_shouji_list) QApplication.processEvents() y_num = y_num +1 else:#考虑只有一个主机池的场景 self.cas_excel_muban() hostpool_name = hostpool_name_auth['list']['hostPool']['name'] hostpool_id = hostpool_name_auth['list']['hostPool']['id'] hostpool_info_summary_auth = self.auth(":8080/cas/casrs/hostpool/summary/{}".format(hostpool_id)) hostpool_cvk_total = int(hostpool_info_summary_auth['list']['keyValue'][0]['value']) hostpool_cpu_total = int(hostpool_info_summary_auth['list']['keyValue'][1]['value']) hostpool_mem_total = hostpool_info_summary_auth['list']['keyValue'][2]['value'] if "TB" in hostpool_mem_total: hostpool_mem_total = str(hostpool_mem_total).replace("TB","") hostpool_mem_total = float(hostpool_mem_total) * 1024 hostpool_mem_total = int(hostpool_mem_total//1) else: hostpool_mem_total = str(hostpool_mem_total).replace("GB","") hostpool_mem_total = float(hostpool_mem_total) hostpool_mem_total = int(hostpool_mem_total//1) hostpool_vm_total = int(hostpool_info_summary_auth['list']['keyValue'][5]['value']) # print( hostpool_cvk_total,hostpool_cpu_total,hostpool_mem_total, hostpool_vm_total) if int(hostpool_vm_total) == 0: QApplication.processEvents() hostpool_vm_cpu_use = 0 hostpool_vm_cpu_per = 0 hostpool_vm_mem_use = 0 hostpool_vm_mem_per = 0 hostpool_vm_stor_beifenpei = 0 hostpool_vm_stor_beifenpei_per = 0 hostpool_cvk_stor_free = 0 hostpool_vm_stor_acutal_per = 0 hostpool_vm_total = 0 hostpool_vm_auth = self.auth(":8080/cas/casrs/hostpool/host/{}?&offset=0&limit=50".format(hostpool_id)) hostpool_cvk_id = hostpool_vm_auth['list']['host']['id'] else: #获取主机池下虚拟机信息 hostpool_vm_auth = self.auth(":8080/cas/casrs/vm/vmList?hpId={}".format(hostpool_id)) hostpool_vm_auth_list = hostpool_vm_auth['list']['domain'] hostpool_vm_cpu_use = 0 hostpool_vm_mem_use = 0 hostpool_vm_stor_beifenpei = 0 for i in range(len(hostpool_vm_auth_list)): vm_stor = 0 QApplication.processEvents() hostpool_cvk_id = hostpool_vm_auth['list']['domain'][0]['hostId'] hostpool_vm_cpu = int(hostpool_vm_auth['list']['domain'][i]['cpu']) hostpool_vm_mem = int(hostpool_vm_auth['list']['domain'][i]['memory']) hostpool_vm_id = int(hostpool_vm_auth['list']['domain'][i]['id']) # 下面是通过遍历所有主机池的虚拟机详细信息,拿到磁盘的分配大小,但是太消耗时间了。 hostpool_vm_detail_auth = self.auth(":8080/cas/casrs/vm/{}".format(hostpool_vm_id)) # print(hostpool_vm_detail_auth) if type(hostpool_vm_detail_auth['domain']['storage']) is list: for i in range(len(hostpool_vm_detail_auth['domain']['storage'])): vm_stor = vm_stor + float(hostpool_vm_detail_auth['domain']['storage'][i]['capacity']) # print(vm_stor) else: vm_stor = float(hostpool_vm_detail_auth['domain']['storage']['capacity']) # print(vm_stor) hostpool_vm_cpu_use =hostpool_vm_cpu_use + hostpool_vm_cpu hostpool_vm_mem_use = hostpool_vm_mem_use + hostpool_vm_mem hostpool_vm_stor_beifenpei = hostpool_vm_stor_beifenpei + vm_stor QApplication.processEvents() hostpool_vm_stor_beifenpei = int(hostpool_vm_stor_beifenpei//1024) # hostpool_vm_stor_beifenpei_per = hostpool_vm_stor_beifenpei hostpool_vm_mem_use = int(hostpool_vm_mem_use/1024) hostpool_vm_cpu_per = hostpool_vm_cpu_use/float(hostpool_cpu_total) hostpool_vm_cpu_per = round(hostpool_vm_cpu_per*100,2) # hostpool_vm_cpu_per = str(hostpool_vm_cpu_per * 100) + "%" hostpool_vm_mem_per = hostpool_vm_mem_use/float(hostpool_mem_total) hostpool_vm_mem_per = round(hostpool_vm_mem_per*100,2) # hostpool_vm_mem_per = str(hostpool_vm_mem_per* 100) + "%" hostpool_cvk_auth = self.auth(":8080/cas/casrs/host/id/{}/storage".format(hostpool_cvk_id)) if hostpool_cvk_auth['list'] == None: hostpool_cvk_stor_total = 0 hostpool_cvk_stor_free = 0 hostpool_vm_stor_beifenpei_per = 0 hostpool_vm_stor_acutal_per = 0 else: hostpool_cvk_list = hostpool_cvk_auth['list']['storagePool'] hostpool_cvk_stor_total = 0 hostpool_cvk_stor_free = 0 if type(hostpool_cvk_list) is list: for i in range(len(hostpool_cvk_list)): hostpool_cvk_stor_total = hostpool_cvk_stor_total + int(hostpool_cvk_list[i]['totalSize']) hostpool_cvk_stor_free = hostpool_cvk_stor_free + int(hostpool_cvk_list[i]['freeSize']) else: hostpool_cvk_stor_total = int(hostpool_cvk_list['totalSize']) hostpool_cvk_stor_free = int(hostpool_cvk_list['freeSize']) QApplication.processEvents() hostpool_cvk_stor_total = int(hostpool_cvk_stor_total//1024) hostpool_cvk_stor_free = int(hostpool_cvk_stor_free//1024) hostpool_vm_stor_beifenpei_per = hostpool_vm_stor_beifenpei/float(hostpool_cvk_stor_total) hostpool_vm_stor_beifenpei_per = round(hostpool_vm_stor_beifenpei_per*100,2) hostpool_vm_stor_acutal_per = (hostpool_cvk_stor_total-hostpool_cvk_stor_free)/float(hostpool_cvk_stor_total) hostpool_vm_stor_acutal_per = round(hostpool_vm_stor_acutal_per*100,2) shouji_str = "{} {} {} {:.2f}% {} {} {:.2f}% {} {} {:.2f}% {} {:.2f}% {} {}".format(hostpool_name,hostpool_cpu_total,hostpool_vm_cpu_use,hostpool_vm_cpu_per,hostpool_mem_total, hostpool_vm_mem_use,hostpool_vm_mem_per,hostpool_cvk_stor_total,hostpool_vm_stor_beifenpei, hostpool_vm_stor_beifenpei_per,hostpool_cvk_stor_free,hostpool_vm_stor_acutal_per,hostpool_vm_total, hostpool_cvk_total) hostpool_vm_cpu_per_str = str(hostpool_vm_cpu_per)+"%" hostpool_vm_mem_per_str = str(hostpool_vm_mem_per)+"%" hostpool_vm_stor_beifenpei_per_str = str(hostpool_vm_stor_beifenpei_per)+"%" hostpool_vm_stor_acutal_per_str = str(hostpool_vm_stor_acutal_per)+"%" cas_shouji_list = [hostpool_name,hostpool_cpu_total,hostpool_vm_cpu_use,hostpool_vm_cpu_per_str,hostpool_mem_total, hostpool_vm_mem_use,hostpool_vm_mem_per_str,hostpool_cvk_stor_total,hostpool_vm_stor_beifenpei, hostpool_vm_stor_beifenpei_per_str,hostpool_cvk_stor_free,hostpool_vm_stor_acutal_per_str,hostpool_vm_total, hostpool_cvk_total] print(cas_shouji_list) # print(shouji_str) # shouji_str_list.append(shouji_str) QApplication.processEvents() self.textBrowser.append(shouji_str) # print(y_num,cas_shouji_list) self.insert_cas_excel_muban(1,cas_shouji_list) QApplication.processEvents() self.save_cas_excel_muban() if __name__=='__main__': app=QApplication(sys.argv) w=Form() w.show() app.exec_()