Python3.7+PyQt5 pyuic5将.ui文件转换为.py文件、Python读取配置文件、生成日志
1.实际开发项目时,是使用Qt Designer来设计UI界面,得到一个.ui的文件,然后利用PyQt5安装时自带的工具pyuic5将.ui文件转换为.py文件:
pyuic5 -o mywindow.py mywindow.ui #先是py文件名,再是ui文件名
样式图 QT5 UI:

转换的pyqt5:
# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'ActionTools.ui'
#
# Created by: PyQt5 UI code generator 5.15.2
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
import socketfrom PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *
import sys
import io
import os
import datetime
import random
from subprocess import Popen,PIPE
from threading import Thread
import time
import configparserclass Ui_ActionWinfrm(QWidget):def __init__(self):super(Ui_ActionWinfrm,self).__init__()self.config=configparser.ConfigParser()#创建对象self.EmployeeInfo=[]#员工信息self.TestServer=[]#测试服务器设置self.MesServer=[]#Mes服务器self.ProductInfo=[]#产品信息self.config.read("./conf/config.conf",encoding="utf-8")#读取配置文件,如果配置文件不存在创建self.Err="NULL"#员工管理信息self.EmployeeInfo.append(self.config.get('EmployeeInfo','Employee'))#工号self.EmployeeInfo.append(self.config.get('EmployeeInfo','Line'))#线体#测试服务器设置self.TestServer.append(self.config.get('TestServer','host'))self.TestServer.append(self.config.get('TestServer','prot'))self.TestServer.append(self.config.get('TestServer','user'))self.TestServer.append(self.config.get('TestServer','password'))#连接服务器self.host = self.TestServer[0]self.prot = self.TestServer[1]#MES服务器设置self.MesServer.append(self.config.get('MesServer','url'))#产品信息self.ProductInfo.append(self.config.get('ProductInfo','ClientName'))self.ProductInfo.append(self.config.get('ProductInfo','ProductName'))self.ProductInfo.append(self.config.get('ProductInfo','OrderInfo'))self.ProductInfo.append(self.config.get('ProductInfo','OrderTotal'))self.ProductInfo.append(self.config.get('ProductInfo','CompleteOrder'))self.data=''self.setupUi()print(self.host + "," + self.prot)self.Client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)def setupUi(self):self.setObjectName("ActionWinfrm")self.resize(1000, 943)font = QtGui.QFont()font.setFamily("Arial")font.setPointSize(12)self.setFont(font)icon = QtGui.QIcon()icon.addPixmap(QtGui.QPixmap("./Imag/020.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)self.setWindowIcon(icon)self.verticalLayout = QtWidgets.QVBoxLayout(self)self.verticalLayout.setObjectName("verticalLayout")self.frame_5 = QtWidgets.QFrame(self)self.frame_5.setFrameShape(QtWidgets.QFrame.StyledPanel)self.frame_5.setFrameShadow(QtWidgets.QFrame.Raised)self.frame_5.setObjectName("frame_5")self.frame_6 = QtWidgets.QFrame(self.frame_5)self.frame_6.setGeometry(QtCore.QRect(0, -1, 981, 41))self.frame_6.setStyleSheet("color: rgb(85, 255, 127);")self.frame_6.setFrameShape(QtWidgets.QFrame.StyledPanel)self.frame_6.setFrameShadow(QtWidgets.QFrame.Raised)self.frame_6.setObjectName("frame_6")self.lbl_WinTitle = QtWidgets.QLabel(self.frame_6)self.lbl_WinTitle.setGeometry(QtCore.QRect(390, 0, 351, 41))font = QtGui.QFont()font.setPointSize(26)self.lbl_WinTitle.setFont(font)self.lbl_WinTitle.setAlignment(QtCore.Qt.AlignCenter)self.lbl_WinTitle.setObjectName("lbl_WinTitle")self.lbl_loginfo = QtWidgets.QLabel(self.frame_6)self.lbl_loginfo.setGeometry(QtCore.QRect(10, 0, 161, 41))self.lbl_loginfo.setText("")self.lbl_loginfo.setPixmap(QtGui.QPixmap("./Imag/logo.jpg"))self.lbl_loginfo.setObjectName("lbl_loginfo")self.frame_7 = QtWidgets.QFrame(self.frame_5)self.frame_7.setGeometry(QtCore.QRect(0, 50, 981, 80))self.frame_7.setFrameShape(QtWidgets.QFrame.StyledPanel)self.frame_7.setFrameShadow(QtWidgets.QFrame.Raised)self.frame_7.setObjectName("frame_7")self.label = QtWidgets.QLabel(self.frame_7)self.label.setGeometry(QtCore.QRect(10, 10, 81, 16))self.label.setAlignment(QtCore.Qt.AlignCenter)self.label.setObjectName("label")self.label_3 = QtWidgets.QLabel(self.frame_7)self.label_3.setGeometry(QtCore.QRect(340, 10, 81, 16))self.label_3.setAlignment(QtCore.Qt.AlignCenter)self.label_3.setObjectName("label_3")self.label_4 = QtWidgets.QLabel(self.frame_7)self.label_4.setGeometry(QtCore.QRect(660, 10, 81, 16))self.label_4.setAlignment(QtCore.Qt.AlignCenter)self.label_4.setObjectName("label_4")self.label_2 = QtWidgets.QLabel(self.frame_7)self.label_2.setGeometry(QtCore.QRect(10, 50, 81, 16))self.label_2.setAlignment(QtCore.Qt.AlignCenter)self.label_2.setObjectName("label_2")self.label_5 = QtWidgets.QLabel(self.frame_7)self.label_5.setGeometry(QtCore.QRect(340, 50, 81, 16))self.label_5.setAlignment(QtCore.Qt.AlignCenter)self.label_5.setObjectName("label_5")self.label_6 = QtWidgets.QLabel(self.frame_7)self.label_6.setGeometry(QtCore.QRect(660, 50, 81, 16))self.label_6.setAlignment(QtCore.Qt.AlignCenter)self.label_6.setObjectName("label_6")self.label_7 = QtWidgets.QLabel(self.frame_7)self.label_7.setGeometry(QtCore.QRect(820, 50, 91, 20))self.label_7.setAlignment(QtCore.Qt.AlignCenter)self.label_7.setObjectName("label_7")self.lbl_ClientName = QtWidgets.QLabel(self.frame_7)self.lbl_ClientName.setGeometry(QtCore.QRect(100, 10, 151, 16))self.lbl_ClientName.setStyleSheet("color: rgb(255, 170, 0);")self.lbl_ClientName.setObjectName("lbl_ClientName")self.lbl_ProductName = QtWidgets.QLabel(self.frame_7)self.lbl_ProductName.setGeometry(QtCore.QRect(420, 10, 54, 12))self.lbl_ProductName.setStyleSheet("color: rgb(255, 170, 0);")self.lbl_ProductName.setObjectName("lbl_ProductName")self.lbl_OrderInfo = QtWidgets.QLabel(self.frame_7)self.lbl_OrderInfo.setGeometry(QtCore.QRect(730, 10, 101, 16))self.lbl_OrderInfo.setAutoFillBackground(False)self.lbl_OrderInfo.setStyleSheet("color: rgb(255, 170, 0);")self.lbl_OrderInfo.setObjectName("lbl_OrderInfo")self.lbl_Employee = QtWidgets.QLabel(self.frame_7)self.lbl_Employee.setGeometry(QtCore.QRect(90, 50, 91, 16))self.lbl_Employee.setStyleSheet("color: rgb(255, 170, 0);")self.lbl_Employee.setObjectName("lbl_Employee")self.lbl_Line = QtWidgets.QLabel(self.frame_7)self.lbl_Line.setGeometry(QtCore.QRect(420, 50, 81, 16))self.lbl_Line.setStyleSheet("color: rgb(255, 170, 0);")self.lbl_Line.setObjectName("lbl_Line")self.lbl_OrderTotal = QtWidgets.QLabel(self.frame_7)self.lbl_OrderTotal.setGeometry(QtCore.QRect(730, 50, 54, 12))self.lbl_OrderTotal.setStyleSheet("color: rgb(255, 170, 0);")self.lbl_OrderTotal.setObjectName("lbl_OrderTotal")self.lbl_COrderNum = QtWidgets.QLabel(self.frame_7)self.lbl_COrderNum.setGeometry(QtCore.QRect(910, 50, 54, 19))self.lbl_COrderNum.setStyleSheet("color: rgb(255, 170, 0);")self.lbl_COrderNum.setObjectName("lbl_COrderNum")self.textEdit = QtWidgets.QTextEdit(self.frame_5)self.textEdit.setGeometry(QtCore.QRect(0, 40, 981, 1))self.textEdit.setObjectName("textEdit")self.TW_TestItemList = QtWidgets.QTableWidget(self.frame_5)self.TW_TestItemList.setGeometry(QtCore.QRect(0, 180, 981, 631))font = QtGui.QFont()font.setPointSize(12)self.TW_TestItemList.setFont(font)self.TW_TestItemList.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)self.TW_TestItemList.setShowGrid(False)self.TW_TestItemList.setObjectName("TW_TestItemList")self.TW_TestItemList.setColumnCount(3)self.TW_TestItemList.setRowCount(0)self.item = QtWidgets.QTableWidgetItem()self.item.setTextAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.AlignTop)font = QtGui.QFont()font.setFamily("Arial")font.setPointSize(12)self.item.setFont(font)icon1 = QtGui.QIcon()icon1.addPixmap(QtGui.QPixmap("Imag/NewAdd.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)self.item.setIcon(icon1)self.TW_TestItemList.setHorizontalHeaderItem(0, self.item)self.item = QtWidgets.QTableWidgetItem()self.item.setTextAlignment(QtCore.Qt.AlignCenter)font = QtGui.QFont()font.setFamily("Arial")font.setPointSize(12)self.item.setFont(font)icon2 = QtGui.QIcon()icon2.addPixmap(QtGui.QPixmap("Imag/TestArgs.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)self.item.setIcon(icon2)self.TW_TestItemList.setHorizontalHeaderItem(1, self.item)self.item = QtWidgets.QTableWidgetItem()self.item.setTextAlignment(QtCore.Qt.AlignCenter)font = QtGui.QFont()font.setFamily("Arial")font.setPointSize(12)self.item.setFont(font)icon3 = QtGui.QIcon()icon3.addPixmap(QtGui.QPixmap("Imag/Result.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)self.item.setIcon(icon3)self.TW_TestItemList.setHorizontalHeaderItem(2, self.item)self.TW_TestItemList.horizontalHeader().setMinimumSectionSize(40)self.TW_TestItemList.verticalHeader().setDefaultSectionSize(50)self.TW_TestItemList.verticalHeader().setMinimumSectionSize(50)self.label_8 = QtWidgets.QLabel(self.frame_5)self.label_8.setGeometry(QtCore.QRect(10, 140, 112, 25))self.label_8.setObjectName("label_8")self.lbl_TestResult = QtWidgets.QLabel(self.frame_5)self.lbl_TestResult.setGeometry(QtCore.QRect(0, 815, 981, 111))self.lbl_TestResult.setStyleSheet("background-color: rgb(0, 0, 0);\n""font: 22pt \"Arial\";\n""color: rgb(255, 255, 0);")self.lbl_TestResult.setAlignment(QtCore.Qt.AlignCenter)self.lbl_TestResult.setObjectName("lbl_TestResult")self.lbl_Isn = QtWidgets.QLineEdit(self.frame_5)self.lbl_Isn.setGeometry(QtCore.QRect(130, 140, 800, 31))self.lbl_Isn.setObjectName("lbl_Isn")self.verticalLayout.addWidget(self.frame_5)self.retranslateUi()QtCore.QMetaObject.connectSlotsByName(self)self.setWindowFlags(QtCore.Qt.WindowMinimizeButtonHint | QtCore.Qt.WindowCloseButtonHint) # 只显示最小化按钮和关闭按钮self.lbl_Isn.setFocus()def retranslateUi(self):self._translate = QtCore.QCoreApplication.translateself.setWindowTitle(self._translate("ActionWinfrm", "【T.e.s.t】"))self.lbl_WinTitle.setText(self._translate("ActionWinfrm", "国产系统在线激活工具"))self.label.setText(self._translate("ActionWinfrm", "客户名称:"))self.label_3.setText(self._translate("ActionWinfrm", "产品名称:"))self.label_4.setText(self._translate("ActionWinfrm", "订单号:"))self.label_2.setText(self._translate("ActionWinfrm", "员工工号:"))self.label_5.setText(self._translate("ActionWinfrm", "线 体:"))self.label_6.setText(self._translate("ActionWinfrm", "订单数:"))self.label_7.setText(self._translate("ActionWinfrm", "完成订单数:"))self.lbl_ClientName.setText(self.ProductInfo[0])#客户名称self.lbl_ProductName.setText(self.ProductInfo[1])#产品名称self.lbl_OrderInfo.setText(self.ProductInfo[2])#订单信息self.lbl_OrderTotal.setText(self.ProductInfo[3])#订单总数self.lbl_COrderNum.setText(self.ProductInfo[4])#完成订单数self.lbl_Employee.setText(self.EmployeeInfo[0])#工号self.lbl_Line.setText(self.EmployeeInfo[1])#线体self.item = self.TW_TestItemList.horizontalHeaderItem(0)self.item.setText(self._translate("ActionWinfrm", "项目名称"))self.item = self.TW_TestItemList.horizontalHeaderItem(1)self.item.setText(self._translate("ActionWinfrm", "测试参数"))self.item = self.TW_TestItemList.horizontalHeaderItem(2)self.item.setText(self._translate("ActionWinfrm", "测试结果"))self.TW_TestItemList.setColumnWidth(0,300)self.TW_TestItemList.setColumnWidth(1, 370)self.TW_TestItemList.setColumnWidth(2, 300)self.TW_TestItemList.setShowGrid(False)#是否显示网线self.label_8.setText(self._translate("ActionWinfrm", "扫描整机条码:"))self.lbl_TestResult.setText(self._translate("ActionWinfrm", "待测试"))def Center(self):#定义一个函数使得函数窗口居中显示#获取屏幕坐标系self.screen=QDesktopWidget().screenGeometry()#获取窗口坐标系self.size=self.geometry()self.newLeft=(self.screen.width()-self.size.width())/2self.newTop=(self.screen.height()-self.size.height())/2.7self.move(int(self.newLeft),int(self.newTop))def Connect(self,message):try:self.Client_socket.connect(self.host,int(self.port))self.lbl_TestResult.setText("Connected To Server..")self.lbl_TestResult.setForeground(QtGui.QColor(51, 204, 51))self.Client_socket.sendall(message.encode())self.data=self.Client_socket.recv(1024)except Exception as e:self.lbl_TestResult.setText("Connected To Server Err:"+str(e))self.lbl_TestResult.setStyleSheet("color:red")return Falseself.Client_socket.close()return Trueif __name__ == '__main__':app = QApplication(sys.argv)win = Ui_ActionWinfrm()win.Center()win.show()#win.Client('10.2.230.10', 8888)win.Connect('tell me the product name and position:00E04C060621')sys.exit(app.exec_())
效果:

2.Python学习之读取配置文件:
初始配置文件test.conf:

步骤1:导入配置文件模块
import configparser
步骤2:创建配置文件对象
config = configparser.ConfigParser()
步骤3:读取配置文件
在这一步中,我们将读取配置文件。配置文件通常存储在.ini或.conf文件中。
config.read('config.ini')
步骤4:获取配置选项
option_value = config.get('section_name', 'option_name')
步骤5:修改配置选项
config.set('section_name', 'option_name', 'new_value')
步骤6:保存配置文件
with open('config.ini', 'w') as config_file:config.write(config_file)
*.展正读取confg的实列:

3.生成日志:
1.创建日志记录器
import logging# 创建一个日志记录器实例
logger = logging.getLogger('my_logger')
2 设置日志记录级别
logger.setLevel(logging.DEBUG)使用setLevel()方法设置日志记录的级别,可以根据需要进行调整。常用的日志级别有:logging.DEBUG:最详细的日志信息,用于调试程序。
logging.INFO:一般的日志信息,用于确认程序正常运行。
logging.WARNING:警告信息,表明程序可能出现问题。
logging.ERROR:错误信息,程序出现错误但仍然可以继续运行。
logging.CRITICAL:严重错误信息,程序无法继续运行。
3.创建文件处理器
file_handler = logging.FileHandler('log.txt')
4.设置文件处理器的格式
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)
5.将处理器添加到记录器中
logger.addHandler(file_handler)
6.输出日志信息
logger.debug('This is a debug message')
logger.info('This is an info message')
logger.warning('This is a warning message')
logger.error('This is an error message')
logger.critical('This is a critical message')

相关文章:
Python3.7+PyQt5 pyuic5将.ui文件转换为.py文件、Python读取配置文件、生成日志
1.实际开发项目时,是使用Qt Designer来设计UI界面,得到一个.ui的文件,然后利用PyQt5安装时自带的工具pyuic5将.ui文件转换为.py文件: pyuic5 -o mywindow.py mywindow.ui #先是py文件名,再是ui文件名样式图 QT5 UI&am…...
使用 VPN ,一定要知道的几个真相!
你们好,我的网工朋友。 今天想和你聊聊VPN。在VPN出现之前,企业分支之间的数据传输只能依靠现有物理网络(例如Internet)。 但由于Internet中存在多种不安全因素,报文容易被网络中的黑客窃取或篡改,最终造…...
数电实验-----实现74LS153芯片扩展为8选1时间选择器以及应用(Quartus II )
目录 一、74LS153芯片介绍 管脚图 功能表 二、4选1选择器扩展为8选1选择器 1.扩展原理 2.电路图连接(Quartus II ) 3.仿真结果 三、8选1选择器的应用 1.三变量表决器 2.奇偶校验电路 一、74LS153芯片介绍 74ls153芯片是属于四选一选择器的芯片。…...
如何实现MATLAB与Simulink的数据交互
参考链接:如何实现MATLAB与Simulink的数据交互 MATLAB是一款强大的数学计算软件,Simulink则是一种基于模型的多域仿真平台,常用于工程和科学领域中的系统设计、控制设计和信号处理等方面。MATLAB和Simulink都是MathWorks公司的产品࿰…...
【数据结构】归并排序
👦个人主页:Weraphael ✍🏻作者简介:目前正在学习c和算法 ✈️专栏:数据结构 🐋 希望大家多多支持,咱一起进步!😁 如果文章有啥瑕疵 希望大佬指点一二 如果文章对你…...
数字引领,智慧赋能|袋鼠云与易知微共同亮相2023智慧港口大会
2023年10月19日,由中国港口协会、中国交通通信信息中心、天津港(集团)有限公司主办,中国港口协会智慧港口专业委员会、《港口科技》杂志社等单位承办的以“数字引领 智慧赋能”为主题的“2023智慧港口大会”在天津顺利召开。 袋鼠…...
星火模型(Spark)的langchain 实现
星火模型的langchain实现 测试已通过,希望有所帮助。 使用前请先安装环境: pip install githttps://github.com/shell-nlp/spark-ai-python.git注意: 一定要使用上面方式安装spark库,因对官方的库做了改动。官方的库已经长时间不…...
python运算符重载之构造函数和迭代器
1 python运算符重载之构造函数和迭代器 python运算符重载是在类方法中拦截内置操作-当类的实例使用内置操作时,pytho自动调用对应方法,并且返回操作结果。 NO#描述1拦截运算运算符重载拦截内置操作,比如打印、函数调用、点号运算、表达式运…...
【数据处理】Python:实现求条件分布函数 | 求平均值方差和协方差 | 求函数函数期望值的函数 | 概率论
猛戳订阅! 👉 《一起玩蛇》🐍 💭 写在前面:本章我们将通过 Python 手动实现条件分布函数的计算,实现求平均值,方差和协方差函数,实现求函数期望值的函数。部署的测试代码放到文后了,运行所需环境 python version >= 3.6,numpy >= 1.15,nltk >= 3.4,tqd…...
new/delete 和malloc/free的区别
C中: 创建单个数据空间: char *ch new char; delete ch; ch NULL; 创建多个数据空间: char *ch new char[4]; delete [] ch; ch NULL; C语言中: 创建单个数据空间: char *ch malloc(sizeof(char)); fre…...
Linux程序设计(上)
系列文章目录 文章目录 系列文章目录前言一、unix, linux, GNU, POSIXLinux程序 二、shellshell语法1.变量2.语句 函数命令命令的执行dialog工具-- 三、文件操作1. Linux 文件结构2. 系统调用和设备驱动程序3. 库函数4. 底层文件访问5. 标准I/O库6.格式化输入输出7. 文件和目录…...
mysql面试题——存储引擎相关
一:MySQL 支持哪些存储引擎? MySQL支持多种存储引擎,比如InnoDB,MyISAM, MySQL大于等于5.5之后,默认存储引擎是InnoDB 二:InnoDB 和 MyISAM 有什么区别? InnoDB支持事务,MyISAM不支持InnoD…...
趣学python编程 (四、数据结构和算法介绍)
数据结构和算法在编程中非常重要。数据结构是组织和存储数据的方式,而算法是解决问题的方法和步骤。你要挑战的蓝桥杯,实际也是在设计算法解决问题。其实各种编程语言都只是工具,而程序的核心数据结构算法。犹如练武,数据结构和算…...
使用Pandas进行时间重采样,充分挖掘数据价值
大家好,时间序列数据蕴含着很大价值,通过重采样技术可以提升原始数据的表现形式。本文将介绍数据重采样方法和工具,提升数据可视化技巧。 在进行时间数据可视化时,数据重采样是至关重要且非常有用的,它支持控制数据的…...
Django(九、choices参数的使用、多对多表的三种创建方式、Ajax技术)
文章目录 一、choices参数choices参数的用法choices 参数用法总结 二、MVC与MTV模式1.MVC2.MTV 三、多对多的三种创建方式1.全自动创建2.纯手动创建半自动创建 四、Django与Ajax1.什么是Ajax常见的场景Ajax案例 一、choices参数 在没有用到choices参数之前,我们在D…...
德语B级SampleAcademy
德语B级 一, 反身代词(1)A 主语和宾语一致(2)D 双宾语,主语与直接宾语不一致(3), 补充单词(4)真反身代词(5)假反身代词(6)真假反身代词(7)相互反身(8)非反身#反身#相互反身 二,Nomen…...
vue3自定义hooks
获取dom的id属性 index.ts import { onMounted } from "vue" type option {el: string }export default function(option:option):Promise<{name: string}> {return new Promise((resolve)>{onMounted(()>{const dom:HTMLElement document.querySele…...
Consistency Models 阅读笔记
简介 Diffusion models需要多步迭代采样才能生成一张图片,这导致生成速度很慢。一致性模型(Consistency models)的提出是为了加速生成过程。 Consistency models可以直接一步采样就生成图片,但是也允许进行多步采样来提高生成的质…...
杭电oj 2034 人见人爱A-B C语言
此处的c和a指向同一块内存空间,改变c就是改变a,反之亦然,此处是为了方便看这么写的,如果不想c和a指向同一空间请分别开辟空间(即不如此写camalloc) #include<stdio.h> #include<stdlib.h>int …...
springboot(ssm大学生成绩管理系统 成绩管理平台Java(codeLW)
springboot(ssm大学生成绩管理系统 成绩管理平台Java(code&LW) 开发语言:Java 框架:ssm/springboot vue JDK版本:JDK1.8(或11) 服务器:tomcat 数据库:mysql 5.7(或8.0&…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving
地址:LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂,正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...
从物理机到云原生:全面解析计算虚拟化技术的演进与应用
前言:我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM(Java Virtual Machine)让"一次编写,到处运行"成为可能。这个软件层面的虚拟化让我着迷,但直到后来接触VMware和Doc…...
Visual Studio Code 扩展
Visual Studio Code 扩展 change-case 大小写转换EmmyLua for VSCode 调试插件Bookmarks 书签 change-case 大小写转换 https://marketplace.visualstudio.com/items?itemNamewmaurer.change-case 选中单词后,命令 changeCase.commands 可预览转换效果 EmmyLua…...
Java 与 MySQL 性能优化:MySQL 慢 SQL 诊断与分析方法详解
文章目录 一、开启慢查询日志,定位耗时SQL1.1 查看慢查询日志是否开启1.2 临时开启慢查询日志1.3 永久开启慢查询日志1.4 分析慢查询日志 二、使用EXPLAIN分析SQL执行计划2.1 EXPLAIN的基本使用2.2 EXPLAIN分析案例2.3 根据EXPLAIN结果优化SQL 三、使用SHOW PROFILE…...
yaml读取写入常见错误 (‘cannot represent an object‘, 117)
错误一:yaml.representer.RepresenterError: (‘cannot represent an object’, 117) 出现这个问题一直没找到原因,后面把yaml.safe_dump直接替换成yaml.dump,确实能保存,但出现乱码: 放弃yaml.dump,又切…...
