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_()
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 为DeepSeek添加本地知识库
· .NET程序员AI开发基座:Microsoft.Extensions.AI
· 精选4款基于.NET开源、功能强大的通讯调试工具
· 数据不出内网:基于Ollama+OneAPI构建企业专属DeepSeek智能中台
· 大模型工具KTransformer的安装