当前位置: 首页 > news >正文

python oa服务器巡检报告脚本的重构和修改(适应数盾OTP)有空再去改

Two-Step Vertification required:

Please enter the mobile app OTPverification code:

01.因为巡检的服务器要双因子认证登录,也就是登录堡垒机时还要输入验证码。这对我的巡检查服务器的工作带来了不便。它的机制是每一次登录,算一次会话,每次会话要输入一次验证码。

总共5台服务器,每个服务器执行5个常规命令,其中一个服务器执行一个特殊命令 5*5+1=26
那么我就要输入26次验证码,验证码每30秒变更一次。每个验证码能用2,3次。

02.验证码肯定要输入的,那么就输入一次,把所有命令操作打包成一次会话执行所有命令,命令包含回车等操作符。

把命放在列表中,当然用循环拼接字符串,一个一个写也可以,但太长可能会写错。

不讲这么多,上脚本主题

# #-*-coding:utf-8-*-
'''000.导入包'''# from posixpath import split 
#001.SSH连接堡垒机,输入命令返回结果到txt文件的包
import util.exe_ssh as es 
#002.构建截图窗口的包
import util.ssh_windows as sw
#003.向巡检报告插入图片的包
import util.insert_image as ii
#004.删除txt,png的包
import util.dele_file as df
#005.时间的包
import time
#006.存储ip,端口,账号,密码,文件地址信息的类
import entity.ssh_info as si
#007.创建命令列表的包
import util.create_command_list as ccl'''100.变量'''
#101.获取当天的年月日
current_time = time.strftime('%Y-%m-%d',time.localtime(time.time()))
#102.我所有登录信息话在ssh_access类里面,通过对象调用变量参数
ssh_obj = si.ssh_access()
#103.单纯文件名
file_name = ssh_obj.file_name
#104.文件的后序docx#
seq_name = ssh_obj.seq_name
#105.存放巡检报告的目录
default_path = ssh_obj.default_path
#106.巡检报告模板的地址
origen_path = default_path+"\\"+file_name+seq_name
#107.重命名巡检模板的巡检报告的地址
rename_path = default_path+"\\"+current_time+"\\"+file_name+current_time+seq_name
#108.putty,因为做一个假的putty窗口,putty图标的位置
icon_path=ssh_obj.icon_path
#109.存放命令返回结果txt文件的目录位置
txt_path=ssh_obj.txt_path
#110.访问堡垒机的ip地址
ip = ssh_obj.ip
#111.访问堡垒机的端口
port=ssh_obj.port
#112.访问堡垒机的账号
account=ssh_obj.account
#113.访问堡垒机的密码
pwd=ssh_obj.pwd
#114.服务器ip地址的列表
#115存ip的列表
fwq_name = [] 
for value in ssh_obj.ip_dic.values():fwq_name.append(value)
'''print("fwq_name的内容")'''
'''print(fwq_name)'''
#116.存放需要命令的列表
fwq_command=ssh_obj.command_list
'''print("fwq_command的内容")'''
'''print(fwq_command)'''
#117.服务器中文搜索的列表
fwq_search_name=[]
for key in ssh_obj.ip_dic.keys():fwq_search_name.append(key)
'''print("fwq_search_name的内容")'''
'''print(fwq_search_name)'''
#118.存放写入txt的目录
fwq_pre_txt_address = ssh_obj.fwq_pre_txt_address
'''print("fwq_pre_txt_address的内容")'''
'''print(fwq_pre_txt_address)'''
#119.存放截图的目录
fwq_pre_img_address = ssh_obj.fwq_pre_img_address
#120.单次会话所有输入命令的列表
full_fwq_name_command_list=ccl.get_fwq_full_name_command_list(fwq_search_name,fwq_command)'''200.业务代码'''
#连接堡垒机,SSH连接返回命结果到txt文件
es.command2txt(ip,             #登录堡垒机的ip地址port,           #登录堡垒机的端口account,        #登录堡垒机的账号pwd,            #登录堡垒机的密码fwq_name,       #服务器ip地址的列表full_fwq_name_command_list,  #单次会话所有输入命令的列表fwq_pre_txt_address  #存放写入txt的目录)#202.遍历截图
sw.show_windows_loop(fwq_pre_txt_address,fwq_pre_img_address,icon_path)    
#203.遍历插入图片
ii.table_insert_img_loop(rename_path,fwq_pre_img_address)    
#把生成png图片删除
df.del_file(fwq_pre_img_address)     
#把生成txt文件全部删除
df.del_file(txt_path)

我主要是对正面的包进行修改

#001.SSH连接堡垒机,输入命令返回结果到txt文件的包

import util.exe_ssh as es

# coding: utf-8
'''000.导入包'''
#001.用来休眠1秒的包
import time
#002.这个是访问堡垒机的包
import paramiko
#003.获取目录中所有文件名的包
import util.return_dir_file_name as rdf
#004.用于删除文件
import os 
#005.创建相同长度的数字字符串列表的包
import util.create_number_order as cno
#006.删除特定字符串前的字符串的包
import util.delete_before_string as dbs
#007.操作txt文件的包,里面写了两个方法,一个是把两个txt文件合并,一个是地址拼接前面加一些东西
import util.txt_util as tu'''100.变量'''
#101.服务器账号前序
account_imf=['[root@oaapp02 ~]# ','[root@oaapp01 ~]# ','[root@bang01 ~]# ','[root@rac1 ~]# ','[root@rac2 ~]# ']
#102.txt的文件名列表,用于对指定txt文件进行操作
keywords_01 = ["01", "12", "23","34","45",'56']
keywords_2=["03","05","07","09"]
keywords_3=["14","16","18","20"]
keywords_4=["25","27","29","31"]
keywords_5=["36","38","40","42"]
keywords_6=["47","49","51","53"]'''200.方法'''
#201.把命令执行结果写入txt文件的方法
def command2txt(ip,                 #ip不变的port,               #端口不变的account,            #用户名不变的pwd,                #密码不变的fwq_name,         #服务器ip的列表commands,         #不是单个命令,而是接收一个命令列表   txt_path,             txt_address         #txt的地址列表):#202.获取私钥pkey=paramiko.RSAKey.from_private_key_file("C:\\Users\\human\\.ssh\\id_rsa",password=pwd)#203.paramiko SSH对象client = paramiko.SSHClient()#204.自动将服务器的公钥添加到known_hosts文件,并接受公钥。client.set_missing_host_key_policy(paramiko.AutoAddPolicy())#205.连接堡垒机client.connect(hostname=ip,port=port,username=account,pkey=pkey,timeout=60)#206.创建发送命令的对象shell = client.invoke_shell()#207.生成00-99的字符串列表number_list=cno.create_hundred_order_list(99)# print(number_list)#208.设置计数器count,拼设置初值为0count=0#209.遍历里面的命令for comand in commands:#210.用下标控制获取数字n=number_list[count]# print(n)#211.发送命令shell.send(comand)#212.如果准备就pass跳过while not shell.recv_ready():pass#213.睡眠0.5秒,模仿人操作time.sleep(0.5)#214.如果命令是'/',则跳过if comand == '/':continue#215.如果命令是搜索的堡垒机的字符串,则跳过elif comand in ('应用服务器02','应用服务器03','应用服务器01','数据库1','数据库2'):continue#216.过滤完执行下面的else:#217.接收命令执行结果stdout = shell.recv(10240)#218.对结果进行解码longstring = stdout.decode('utf-8')#219.如果结果包含"连用云",则跳过if "连用云" in longstring:continue#220.如果结果包含"exit",则跳过elif "exit" == longstring:continueelse:#221.将结果写入txt文件with open(txt_address+n+".txt",'w') as f:print(longstring,file = f)#222.计数器加1count+=1#223.获取目录中的文件名列表    file_name_list=rdf.re_file_name_list(txt_path)# print(file_name_list)#224.删除开头没有用的txt文件for f in file_name_list:print("f的值")print(f)keywords = ["00", "11", "22","33","44","55"]if any(keyword in f for keyword in keywords):os.remove(txt_path+"\\"+f)#225.删除完文件再获取目录中的文件名列表file_name_list=rdf.re_file_name_list(txt_path)#226.删除登录每个服务器txt文件开头的一些内容for f in file_name_list:# print("f的值")# print(f)#227.if any(keyword in f for keyword in keywords_01):# os.remove(txt_path+"\\"+f)with open(txt_path+"\\"+f, 'r') as file:content = file.read()if '56' in f:content = dbs.dele_before_str(content,'[root')with open(txt_path+"\\"+f, 'w') as file:file.write(content)else: content = dbs.dele_before_str(content,'[root').replace("--color=never","")with open(txt_path+"\\"+f, 'w') as file:file.write(content)#删除完再获取for f in file_name_list:if any(keyword in f for keyword in keywords_2):  with open(txt_path+"\\"+f, 'r') as file:content = file.read()content = account_imf[0]+contentwith open(txt_path+"\\"+f, 'w') as file:file.write(content)for f in file_name_list:if any(keyword in f for keyword in keywords_3):  with open(txt_path+"\\"+f, 'r') as file:content = file.read()content = account_imf[1]+contentwith open(txt_path+"\\"+f, 'w') as file:file.write(content)for f in file_name_list:if any(keyword in f for keyword in keywords_4):  with open(txt_path+"\\"+f, 'r') as file:content = file.read()content = account_imf[2]+contentwith open(txt_path+"\\"+f, 'w') as file:file.write(content)for f in file_name_list:if any(keyword in f for keyword in keywords_5):  with open(txt_path+"\\"+f, 'r') as file:content = file.read()content = account_imf[3]+contentwith open(txt_path+"\\"+f, 'w') as file:file.write(content)for f in file_name_list:if any(keyword in f for keyword in keywords_6):  with open(txt_path+"\\"+f, 'r') as file:content = file.read()content = account_imf[4]+contentwith open(txt_path+"\\"+f, 'w') as file:file.write(content)file_name_list=rdf.re_file_name_list(txt_path)# print("fwq_name的值")                # print(fwq_name)for ip_name in fwq_name:if ip_name==fwq_name[0]:tu.conbine_txt(tu.add_pre_txt_address(file_name_list[0]),tu.add_pre_txt_address(file_name_list[1]),tu.add_pre_txt_address(ip_name+"-0.txt"))tu.conbine_txt(tu.add_pre_txt_address(file_name_list[2]),tu.add_pre_txt_address(file_name_list[3]),tu.add_pre_txt_address(ip_name+"-1.txt"))tu.conbine_txt(tu.add_pre_txt_address(file_name_list[4]),tu.add_pre_txt_address(file_name_list[5]),tu.add_pre_txt_address(ip_name+"-2.txt"))tu.conbine_txt(tu.add_pre_txt_address(file_name_list[6]),tu.add_pre_txt_address(file_name_list[7]),tu.add_pre_txt_address(ip_name+"-3.txt"))tu.conbine_txt(tu.add_pre_txt_address(file_name_list[8]),tu.add_pre_txt_address(file_name_list[9]),tu.add_pre_txt_address(ip_name+"-4.txt"))elif ip_name==fwq_name[1]:tu.conbine_txt(tu.add_pre_txt_address(file_name_list[10]),tu.add_pre_txt_address(file_name_list[11]),tu.add_pre_txt_address(ip_name+"-0.txt"))tu.conbine_txt(tu.add_pre_txt_address(file_name_list[12]),tu.add_pre_txt_address(file_name_list[13]),tu.add_pre_txt_address(ip_name+"-1.txt"))tu.conbine_txt(tu.add_pre_txt_address(file_name_list[14]),tu.add_pre_txt_address(file_name_list[15]),tu.add_pre_txt_address(ip_name+"-2.txt"))tu.conbine_txt(tu.add_pre_txt_address(file_name_list[16]),tu.add_pre_txt_address(file_name_list[17]),tu.add_pre_txt_address(ip_name+"-3.txt"))tu.conbine_txt(tu.add_pre_txt_address(file_name_list[18]),tu.add_pre_txt_address(file_name_list[19]),tu.add_pre_txt_address(ip_name+"-4.txt"))elif ip_name==fwq_name[2]:tu.conbine_txt(tu.add_pre_txt_address(file_name_list[20]),tu.add_pre_txt_address(file_name_list[21]),tu.add_pre_txt_address(ip_name+"-0.txt"))tu.conbine_txt(tu.add_pre_txt_address(file_name_list[22]),tu.add_pre_txt_address(file_name_list[23]),tu.add_pre_txt_address(ip_name+"-1.txt"))tu.conbine_txt(tu.add_pre_txt_address(file_name_list[24]),tu.add_pre_txt_address(file_name_list[25]),tu.add_pre_txt_address(ip_name+"-2.txt"))tu.conbine_txt(tu.add_pre_txt_address(file_name_list[26]),tu.add_pre_txt_address(file_name_list[27]),tu.add_pre_txt_address(ip_name+"-3.txt"))tu.conbine_txt(tu.add_pre_txt_address(file_name_list[28]),tu.add_pre_txt_address(file_name_list[29]),tu.add_pre_txt_address(ip_name+"-4.txt"))elif ip_name==fwq_name[3]:tu.conbine_txt(tu.add_pre_txt_address(file_name_list[30]),  tu.add_pre_txt_address(file_name_list[31]),tu.add_pre_txt_address(ip_name+"-0.txt"))tu.conbine_txt(tu.add_pre_txt_address(file_name_list[32]),tu.add_pre_txt_address(file_name_list[33]),tu.add_pre_txt_address(ip_name+"-1.txt"))tu.conbine_txt(tu.add_pre_txt_address(file_name_list[34]),tu.add_pre_txt_address(file_name_list[35]),tu.add_pre_txt_address(ip_name+"-2.txt"))tu.conbine_txt(tu.add_pre_txt_address(file_name_list[36]),tu.add_pre_txt_address(file_name_list[37]),tu.add_pre_txt_address(ip_name+"-3.txt"))tu.conbine_txt(tu.add_pre_txt_address(file_name_list[38]),tu.add_pre_txt_address(file_name_list[39]),tu.add_pre_txt_address(ip_name+"-4.txt"))tu.conbine_txt(tu.add_pre_txt_address(file_name_list[-3]),tu.add_pre_txt_address(file_name_list[-2]),tu.add_pre_txt_address(ip_name+"-5.txt"))elif ip_name==fwq_name[4]:tu.conbine_txt(tu.add_pre_txt_address(file_name_list[40]),tu.add_pre_txt_address(file_name_list[41]),tu.add_pre_txt_address(ip_name+"-0.txt"))tu.conbine_txt(tu.add_pre_txt_address(file_name_list[42]),tu.add_pre_txt_address(file_name_list[43]),tu.add_pre_txt_address(ip_name+"-1.txt"))tu.conbine_txt(tu.add_pre_txt_address(file_name_list[44]),tu.add_pre_txt_address(file_name_list[45]),tu.add_pre_txt_address(ip_name+"-2.txt"))tu.conbine_txt(tu.add_pre_txt_address(file_name_list[46]),tu.add_pre_txt_address(file_name_list[47]),tu.add_pre_txt_address(ip_name+"-3.txt"))tu.conbine_txt(tu.add_pre_txt_address(file_name_list[48]),tu.add_pre_txt_address(file_name_list[49]),tu.add_pre_txt_address(ip_name+"-4.txt"))#删除00-55的txt文for f in file_name_list:print("f的值")print(f)# keywords = ["00", "11", "22","33","44","55"]if any(keyword in f for keyword in number_list):os.remove(txt_path+"\\"+f)

07.创建列表命令列表的包,用于生成一个会话完成所有命令列表

#007.创建命令列表的包
import util.create_command_list as ccl

# #-*-coding:utf-8-*-
def get_fwq_full_name_command_list(fwq_search_name,command_list):full_name_command_list=[]exit_list=['exit',chr(0x0D)]for fwq_name in fwq_search_name:fwq_name_command=[chr(0x2F),fwq_name,chr(0x0D),chr(0x0D)]fwq_full_command_list=[]for command in command_list:fwq_command=[command,chr(0x0D)]fwq_full_command_list+=fwq_command# print(fwq_command_command)full_command_list=fwq_name_command+fwq_full_command_listfull_name_command_list+=(full_command_list+exit_list)special_comand_list=[chr(0x2F),'数据库1',chr(0x0D),chr(0x0D),'su - grid asmcmd lsdg',chr(0x0D),chr(0x0D)]full_name_command_list+=special_comand_listprint(full_name_command_list) return full_name_command_list

执行的结果 

相关文章:

python oa服务器巡检报告脚本的重构和修改(适应数盾OTP)有空再去改

Two-Step Vertification required: Please enter the mobile app OTPverification code: 01.因为巡检的服务器要双因子认证登录,也就是登录堡垒机时还要输入验证码。这对我的巡检查服务器的工作带来了不便。它的机制是每一次登录,算一次会话…...

微信小程序下拉刷新与上拉触底的全面教程

微信小程序下拉刷新与上拉触底的全面教程 引言 在微信小程序的开发中,用户体验至关重要。下拉刷新和上拉触底是提高用户交互体验的重要功能,能够让用户轻松获取最新数据和内容。本文将详细介绍这两个功能的实现方式,结合实际案例、代码示例和图片展示,帮助开发者轻松掌握…...

第三十九章:Grafana 概述、Docker安装与验证指南

Grafana 概述、Docker安装与验证指南 一、Grafana 概述 Grafana 是一个跨平台的开源可视化分析工具,是目前网络架构和应用分析中最流行的时序数据展示工具。它主要用于大规模指标数据的可视化展示,并支持多种数据源和丰富的可视化插件。Grafana 使用Go语言开发,具备数据监…...

使用go实现流式输出

流式输出的深度剖析 之前一直在调用openai的key,只是照着文档进行流式调用,也只知其确是流式与api有所不同,而未成体系深究其实现原理。 就以openai的官方流式输出为切入。 概述 流式输出(Streaming Output)是 HTT…...

WebSocket详解、WebSocket入门案例

目录 1.1 WebSocket介绍 http协议: webSocket协议: 1.2WebSocket协议: 1.3客户端(浏览器)实现 1.3.2 WebSocket对象的相关事宜: 1.3.3 WebSOcket方法 1.4 服务端实现 服务端如何接收客户端发送的请…...

元组部分介绍

元组部分 元组的基本格式与特点 #1.元组 #基本格式: 元组名(元素1,元素2,元素3) #注意:所有元素包含在小括号内,元素与元素之间用逗号隔开,可以是不同的元素类型 #注意&#xff1a…...

mfc100u.dll是什么?分享几种mfc100u.dll丢失的解决方法

mfc100u.dll 是一个动态链接库(DLL)文件,属于 Microsoft Foundation Classes (MFC) 库的一部分。MFC 是微软公司开发的一套用于快速开发 Windows 应用程序的 C 类库。mfc100u.dll 文件包含了 MFC 库中一些常用的函数和类的定义,这…...

企业数字化转型现状

国家数字经济战略背景 2018年以来,国家政府不断出台政策规范我国企业数字化治理市场。2018年9月颁布《关于发展数字经济稳定并扩大就业的指导意见》,支持建设一批数字经济创新创业孵化机构。积极推进供应链创新与应用,支持构建以企业为主导。…...

数据治理:在企业数据管理中的关键角色与实现路径——《DAMA 数据管理知识体系指南》读书笔记- 第 3 章

文章目录 1. 数据治理的核心内涵与战略价值2. 数据治理的驱动因素:不仅仅是合规3. 数据治理的组织模型:选择适合企业结构的运营模式4. 实施数据治理的关键步骤:战略、制度和文化5. 数据治理工具的选择:支持业务与流程的高效管理6.…...

树莓派2装FreeBSD14.1 Raspberry Pi2 install FreeBSD14.1 00000121:error:0A000086:SSL

树莓派2代的Model B采用Broadcom BCM2836 900MHz的四核SoC,1GB内存,是新一代开拓者,兼容1代B。相比之下,树莓派2的性能比1代提升6倍,内存翻了一番。Raspberry Pi 2不仅能跑全系列ARM GNU/Linux发行版,而且支…...

uniop触摸屏维修eTOP40系列ETOP40-0050

在现代化的工业与商业环境中,触摸屏设备已成为不可或缺的人机交互界面。UNIOP,作为一个知名的触摸屏品牌,以其高性能、稳定性和用户友好性,广泛应用于各种自动化控制系统、自助服务终端以及高端展示系统中。然而,即便如…...

uniapp+vue2重新进入小程序就清除缓存,设备需要重新扫码

代码 app.vue页面 <script>export default {onLaunch: function() {uni.removeStorageSync(equiId)}} </script>...

视频推拉流EasyDSS互联网直播点播平台技术特点及应用场景剖析

在数字科技日新月异的今天&#xff0c;视频直播和点播已经成为互联网内容传播的重要方式之一。而互联网直播点播平台EasyDSS作为功能强大的流媒体直播点播视频能力平台&#xff0c;提供了一站式的视频推拉流、转码、直播、点播、时移回放、存储等视频服务&#xff0c;广泛应用于…...

论文笔记 网络安全图谱以及溯源算法

​ 本文提出了一种网络攻击溯源框架&#xff0c;以及一种网络安全知识图谱&#xff0c;该图由六个部分组成&#xff0c;G <H&#xff0c;V&#xff0c;A&#xff0c;E&#xff0c;L&#xff0c;S&#xff0c;R>。 1|11.知识图 ​ 网络知识图由六个部分组成&#xff0c…...

抓住鸿蒙生态崛起的机遇,拥抱未来开发挑战

随着华为鸿蒙&#xff08;HarmonyOS&#xff09;的持续发展&#xff0c;鸿蒙生态正在迅速崛起&#xff0c;逐步在智能手机、智能穿戴、车载、家居等领域形成完整闭环。它不仅为开发者带来了新的机遇&#xff0c;还带来了技术上的挑战。如何抓住这些机遇并应对挑战&#xff0c;是…...

STM32WB55RG开发(5)----监测STM32WB连接状态

STM32WB55RG开发----5.生成 BLE 程序连接手机APP 概述硬件准备视频教学样品申请源码下载参考程序选择芯片型号配置时钟源配置时钟树RTC时钟配置RF wakeup时钟配置查看开启STM32_WPAN条件配置HSEM配置IPCC配置RTC启动RF开启蓝牙LED配置设置工程信息工程文件设置参考文档SVCCTL_A…...

ArcGIS应用指南:ArcGIS制作局部放大地图

在地理信息系统&#xff08;GIS&#xff09;中&#xff0c;制作详细且美观的地图是一项重要的技能。地图制作不仅仅是简单地将地理数据可视化&#xff0c;还需要考虑地图的可读性和美观性。局部放大图是一种常见的地图设计技巧&#xff0c;用于展示特定区域的详细信息&#xff…...

浅谈网络 | 传输层之TCP协议

目录 TCP 包头格式TCP 的三次握手TCP 的四次挥手TCP 的可靠性与"靠谱"的哲学TCP流量控制TCP拥塞控制 上一章我们提到&#xff0c;UDP 就像我们小时候一样简单天真&#xff0c;它相信“网之初&#xff0c;性本善&#xff0c;不丢包&#xff0c;不乱序”&#xff0c;因…...

‌Kotlin中的?.和!!主要区别

目录 1、?.和!!介绍 2、使用场景和最佳实践 3、代码示例和解释 1、?.和!!介绍 ‌Kotlin中的?.和!!主要区别在于它们对空指针的处理方式。‌ ‌?.&#xff08;安全调用操作符&#xff09;‌&#xff1a;当变量可能为null时&#xff0c;使用?.可以安全地调用其方法或属性…...

【漏洞复现】代付微信小程序系统 read.php 任意文件读取漏洞

免责声明: 本文旨在提供有关特定漏洞的信息,以帮助用户了解潜在风险。发布此信息旨在促进网络安全意识和技术进步,并非出于恶意。读者应理解,利用本文提到的漏洞或进行相关测试可能违反法律或服务协议。未经授权访问系统、网络或应用程序可能导致法律责任或严重后果…...

Python人工智能项目报告

一、实践概述 1、实践计划和目的 在现代社会&#xff0c;计算机技术已成为支撑社会发展的核心力量&#xff0c;渗透到生活的各个领域&#xff0c;应关注人类福祉&#xff0c;确保自己的工作成果能够造福社会&#xff0c;同时维护安全、健康的自然环境&#xff0c;设计出具有包…...

PyQt6+pyqtgraph折线图绘制显示

1、实现效果 2、环境&#xff1a; 确认已经安装pyqtgraph的模块&#xff0c;如果没有安装&#xff0c;使用命令安装&#xff1a; pip install pyqtgraph 3、代码实现&#xff1a; 绘制折线函数&#xff1a; import sys import random from PySide6.QtWidgets import QAppl…...

1-golang_org_x_crypto_bcrypt测试 --go开源库测试

1.实例测试 package mainimport ("fmt""golang.org/x/crypto/bcrypt" )func main() {password : []byte("mysecretpassword")hashedPassword, err : bcrypt.GenerateFromPassword(password, bcrypt.DefaultCost)if err ! nil {fmt.Println(err)…...

C语言菜鸟入门·关键字·union的用法

目录 1. 简介 2. 访问成员 2.1 声明 2.2 赋值 3. 共用体的大小 4. 与typedef联合使用 5. 更多关键字 1. 简介 共用体&#xff08;union&#xff09;是一种数据结构&#xff0c;它允许在同一内存位置存储不同的数据类型&#xff0c;但每次只能存储其中一种类型的…...

leetcode hot100【LeetCode 238.除自身以外数组的乘积】java实现

LeetCode 238.除自身以外数组的乘积 题目描述 给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 …...

【测试工具JMeter篇】JMeter性能测试入门级教程(一)出炉,测试君请各位收藏了!!!

一、前言 Apache JMeter是纯Java的开源软件&#xff0c;最初由Apache软件基金会的Stefano Mazzocchi开发&#xff0c;旨在加载测试功能行为和测量性能。可以使用JMeter进行性能测试&#xff0c;即针对重负载、多用户和并发流量测试Web应用程序。 我们选择JMeter原因 是否测试过…...

嵌入式驱动开发详解3(pinctrl和gpio子系统)

文章目录 前言pinctrl子系统pin引脚配置pinctrl驱动详解 gpio子系统gpio属性配置gpio子系统驱动gpio子系统API函数与gpio子系统相关的of函数 pinctrl和gpio子系统的使用设备树配置驱动层部分用户层部分 前言 如果不用pinctrl和gpio子系统的话&#xff0c;我们开发驱动时需要先…...

使用 OpenCV 进行视频中的行人检测

在计算机视觉领域&#xff0c;行人检测是一个重要的研究方向&#xff0c;它在视频监控、自动驾驶、人机交互等领域都有着广泛的应用。本文将介绍如何使用 OpenCV 库来实现视频中的行人检测。 环境准备 首先&#xff0c;我们需要安装 OpenCV 库。可以通过以下命令来安装&#…...

py文件转pyd文件的那些坑

当编译py脚本文件发给客户使用时&#xff0c;为了保密源代码防止反编译&#xff0c;可以将py文件转换为pyd文件&#xff0c;然后使用pyinstaller工具转换为exe应用程序&#xff0c;但有时测试发现&#xff0c;py文件可以正常运行&#xff0c;转换为pyd文件后却有各种错误&#…...

go interface(接口)使用

在 Go 语言中&#xff0c;接口&#xff08;interface&#xff09;是一种抽象类型&#xff0c;它定义了一组方法&#xff0c;但是不实现这些方法。接口指定了一个对象的行为&#xff0c;而不关心对象的具体实现。接口使得代码更加灵活和可扩展。 定义接口 接口使用 type 关键字…...

前端---HTML(一)

HTML_网络的三大基石和html普通文本标签 1.我们要访问网络&#xff0c;需不需要知道&#xff0c;网络上的东西在哪&#xff1f; 为什么我们写&#xff0c;www.baidu.com就能找到百度了呢&#xff1f; 我一拼ping www.baidu.com 就拼到了ip地址&#xff1a; [119.75.218.70]…...

unsloth vlm模型Qwen2-VL、Llama 3.2 Vision微调案例

T4卡15G显卡训练 参考: https://github.com/unslothai/unsloth 按自己显卡cuda版本安装 免费colab微调代码: Qwen2-VL: https://colab.research.google.com/drive/1whHb54GNZMrNxIsi2wm2EY_-Pvo2QyKh?usp=sharing from unsloth import FastVisionModel # NEW instead …...

云网络基础- TCP/IP 协议

文章目录 典型服务模式TCP/IP 协议设置和查看IPIP地址的分类:IP地址组成: 网络位主机位组成克隆:产生一台新的虚拟机win2008 典型服务模式 • C/S,Client/Server架构 – 由服务器提供资源或某种功能 – 客户机使用资源或功能 TCP/IP 协议 • TCP/IP是最广泛支持的通信协议集合…...

【数据分享】2001-2023年我国30米分辨率冬小麦种植分布栅格数据(免费获取)

小麦、玉米、水稻等各类农作物的种植分布数据在农业、环境、国土等很多专业都经常用到&#xff01; 本次给大家分享的是我国2001-2023年逐年的30米分辨率冬小麦种植分布栅格数据&#xff01;数据格式为TIFF格式&#xff0c;数据坐标为GCS_WGS_1984。该数据包括我国11个省份的冬…...

前端预览pdf文件流

需求 后端接口返回pdf文件流&#xff0c;实现新窗口预览pdf。 解决方案 把后端返回的pdf文件流转为blob路径&#xff0c;利用浏览器直接预览。 具体实现步骤 1、引入axios import axios from axios;2、创建预览方法&#xff08;具体使用时将axios的请求路径替换为你的后端…...

【Leetcode 每日一题】146. LRU 缓存(c++)

146. LRU 缓存 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中&#xff0c;则返回关键字的值&#x…...

Neural Magic 发布 LLM Compressor:提升大模型推理效率的新工具

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

QT简易项目 数据库可视化界面 数据库编程SQLITE QT5.12.3环境 C++实现

案例需求&#xff1a; 完成数据库插入&#xff0c;删除&#xff0c;修改&#xff0c;查看操作。 分为 插入&#xff0c;删除&#xff0c;修改&#xff0c;查看&#xff0c;查询 几个模块。 代码&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget…...

为什么DDoS防御很贵?

分布式拒绝服务攻击&#xff08;DDoS攻击&#xff09;是一种常见的网络安全威胁&#xff0c;通过大量恶意流量使目标服务器无法提供正常服务。DDoS防御是一项复杂且昂贵的服务&#xff0c;本文将详细探讨为什么DDoS防御如此昂贵&#xff0c;并提供一些实用的代码示例和解决方案…...

Spring Boot3远程调用工具RestClient

Spring Boot3.2之后web模块提供了一个新的远程调用工具RestClient&#xff0c;它的使用比RestTemplate方便&#xff0c;开箱即用&#xff0c;不需要单独注入到容器之中&#xff0c;友好的rest风格调用。下面简单的介绍一下该工具的使用。 一、写几个rest风格测试接口 RestCont…...

C51相关实验

C51相关实验 LED //功能&#xff1a;1.让开发板的LED全亮&#xff0c;2,点亮某一个LED,3.让LED3以5Hz的频率闪动#include "reg52.h"#define LED P2 sbit led1 LED^1;void main(void) {LED 0xff;//LED全灭led1 0;while(1)//保持应用程序不退出{} }LED 输出端是高…...

云服务器部署springboot项目、云服务器配置JDK、Tomcat

目录 环境准备&#xff1a;JDK、Tomcat 将两个文件上传刀usr/java目录下并解压&#xff1a; 改java相关文件里的参数 执行以下命令&#xff0c;打开 profile 文件 执行以下命令&#xff0c;读取环境变量&#xff1a; 查看JDK是否安装成功&#xff1a; 改Tomcat参数 项目…...

STM32 USART串口发送

单片机学习&#xff01; 目录 前言 一、串口发送配置步骤 二、详细步骤 2.1 RCC开启USART和GPIO时钟 2.2 GPIO初始化 2.3 配置USART 2.4 开启USART 2.5 初始化总代码 三、发送数据函数设计 3.1 发送一个字节数据函数 3.2 发送一个数组函数 3.3 发送字符串函数 3.4…...

二叉树的深度搜索专题一>计算布尔二叉树的值

题目&#xff1a; 题目解析&#xff1a; 算法解析&#xff1a; 代码&#xff1a; public boolean evaluateTree(TreeNode root) {if(root.left null && root.right null) return root.val 1 ? true : false;boolean leftTree evaluateTree(root.left);boolean…...

Web day01 html css

目录 1.html: 常用标签&#xff1a; 1.video img p br b u i s &#xff1a; 2.布局标签&#xff1a;div span 3.表单标签&#xff1a; 4.表单标签项&#xff1a; 5.表格标签: 2.css: 1.使用样式: 2.选择器&#xff1a; 3.样式&#xff1a; 1.color&#xff1a; 2. …...

PHP 超级全局变量

超级全局变量是指在php任意脚本下都可以使用 PHP 超级全局变量列表: $GLOBALS&#xff1a;是PHP的一个超级全局变量组&#xff0c;在一个PHP脚本的全部作用域中都可以访问。 $_SERVER&#xff1a;$_SERVER 是一个PHP内置的超级全局变量,它是一个包含了诸如头信息(header)、路…...

题目:素数列

思路&#xff1a; 注意审题&#xff0c;题目中的等差素数列指公差相同且每一个元素都是素数的数列&#xff0c;并不是说是所有素数中一段连续且插值相同的数列&#xff0c;它可以是离散的。 因此&#xff0c;只需要暴力的遍历每一个素数&#xff0c;并找以其开头的所有可能等差…...

机器学习系列-决策树

文章目录 1. 决策树原理决策树的构建流程 2. 案例步骤 1&#xff1a;计算当前节点的熵步骤 2&#xff1a;对每个特征计算分裂后的熵(1) 按“天气”分裂数据集(2) 计算分裂后的加权熵 步骤 3&#xff1a;计算分裂依据信息增益信息增益率GINI系数&#xff08;二叉树&#xff09; …...

H3C OSPF 多区域实验

目录 前言 实验拓扑 实验需求 实验解析 路由器配置 测试 前言 此篇文章为 OSPF多区域试验&#xff0c;建议先食用OSPF单区域实验&#xff0c;理解实验原理 学习基本配置&#xff0c;再来使用此篇&#xff0c;效果更佳&#xff01;&#xff08;当然如果你已经了解原理与基…...

【Python】 深入理解Python的单元测试:用unittest和pytest进行测试驱动开发

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 单元测试是现代软件开发中的重要组成部分,通过验证代码的功能性、准确性和稳定性,提升代码质量和开发效率。本文章深入介绍Python中两种主流单元测试框架:unittest和pytest,并结合测试驱动开发(TDD)…...