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

Python项目75:PyInstaller+Tkinter+subprocess打包工具1.0(安排 !!)

这个打包工具包含以下功能:

1.主要功能:选择Python脚本文件,设置打包选项(单文件打包、无控制台窗口),自定义程序图标,指定输出目录,实时显示打包日志。
2.自适应布局改进:使用grid布局替代部分pack布局,增强布局控制,为所有容器设置grid_columnconfigure和grid_rowconfigure的weight参数,为Entry组件添加sticky="ew"使其可以水平扩展,日志区域使用nsew粘性设置,配合滚动条实现双向扩展,设置窗口最小尺寸限制minsize(600, 400)。
3.使用说明:选择要打包的Python脚本文件(.py),根据需要设置打包选项(可选)选择程序图标(.ico),(可选)添加版本信息文件选择组件(支持.rc,.txt文件),(可选)指定输出目录,点击"开始打包"按钮启动打包过程。

4.注意事项:电脑上需要提前安装PyInstaller:pip install pyinstaller,输出目录默认使用PyInstaller的默认设置(当前目录下的dist文件夹)。在这里插入图片描述

# -*- coding: utf-8 -*-
# @Author : 小红牛
# 微信公众号:wdPython
import tkinter as tk
from tkinter import ttk, filedialog, messagebox
import subprocess
import os
import threadingclass PyInstallerPacker:def __init__(self, root):self.root = rootroot.title("PyInstaller打包exe工具1.0")root.geometry("720x550")root.minsize(640, 480)# 配置根窗口网格布局root.grid_columnconfigure(0, weight=1)root.grid_rowconfigure(0, weight=1)# 样式配置self.style = ttk.Style()self.style.configure("TButton", padding=6)self.style.configure("TLabel", padding=3)self.style.configure("TEntry", padding=3)# 主框架main_frame = ttk.Frame(root, padding=15)main_frame.grid(row=0, column=0, sticky="nsew")main_frame.grid_columnconfigure(1, weight=1)main_frame.grid_rowconfigure(3, weight=1)# 脚本选择组件ttk.Label(main_frame, text="Python脚本路径:").grid(row=0, column=0, sticky="w", pady=3)self.script_entry = ttk.Entry(main_frame)self.script_entry.grid(row=0, column=1, sticky="ew", padx=5)ttk.Button(main_frame, text="浏览",command=self.browse_script).grid(row=0, column=2, padx=5)# 打包选项框架options_frame = ttk.LabelFrame(main_frame, text="打包选项", padding=10)options_frame.grid(row=1, column=0, columnspan=3,pady=10, sticky="ew")options_frame.grid_columnconfigure(1, weight=1)# 打包选项内容self.onefile_var = tk.BooleanVar()ttk.Checkbutton(options_frame, text="单文件打包",variable=self.onefile_var).grid(row=0, column=0, sticky="w", padx=5)self.noconsole_var = tk.BooleanVar(value=True)ttk.Checkbutton(options_frame, text="无控制台窗口",variable=self.noconsole_var).grid(row=0, column=1, sticky="w", padx=5)# 图标设置ttk.Label(options_frame, text="程序图标:").grid(row=1, column=0, sticky="w", pady=5)self.icon_entry = ttk.Entry(options_frame)self.icon_entry.grid(row=1, column=1, sticky="ew", padx=5)ttk.Button(options_frame, text="选择图标",command=self.browse_icon, width=10).grid(row=1, column=2)# 版本信息设置ttk.Label(options_frame, text="版本信息文件:").grid(row=2, column=0, sticky="w", pady=5)self.version_entry = ttk.Entry(options_frame)self.version_entry.grid(row=2, column=1, sticky="ew", padx=5)ttk.Button(options_frame, text="选择文件",command=self.browse_version, width=10).grid(row=2, column=2)# 输出目录设置ttk.Label(main_frame, text="输出目录:").grid(row=2, column=0, sticky="w", pady=3)self.output_entry = ttk.Entry(main_frame)self.output_entry.grid(row=2, column=1, sticky="ew", padx=5)ttk.Button(main_frame, text="选择目录",command=self.browse_output).grid(row=2, column=2, padx=5)# 日志区域log_frame = ttk.LabelFrame(main_frame, text="打包日志", padding=5)log_frame.grid(row=3, column=0, columnspan=3,pady=10, sticky="nsew")log_frame.grid_rowconfigure(0, weight=1)log_frame.grid_columnconfigure(0, weight=1)self.log_text = tk.Text(log_frame, wrap=tk.WORD,font=('Consolas', 10))scrollbar = ttk.Scrollbar(log_frame, orient="vertical",command=self.log_text.yview)self.log_text.configure(yscrollcommand=scrollbar.set)self.log_text.grid(row=0, column=0, sticky="nsew")scrollbar.grid(row=0, column=1, sticky="ns")# 打包按钮self.pack_btn = ttk.Button(main_frame, text="开始打包",command=self.start_packing)self.pack_btn.grid(row=4, column=1, pady=10)def browse_script(self):"""选择Python脚本文件"""path = filedialog.askopenfilename(filetypes=[("Python文件", "*.py"), ("所有文件", "*.*")])if path:self.script_entry.delete(0, tk.END)self.script_entry.insert(0, os.path.normpath(path))def browse_icon(self):"""选择图标文件"""path = filedialog.askopenfilename(filetypes=[("图标文件", "*.ico"), ("所有文件", "*.*")])if path:self.icon_entry.delete(0, tk.END)self.icon_entry.insert(0, os.path.normpath(path))def browse_version(self):"""选择版本信息文件"""path = filedialog.askopenfilename(filetypes=[("资源文件", "*.rc *.txt"), ("所有文件", "*.*")])if path:self.version_entry.delete(0, tk.END)self.version_entry.insert(0, os.path.normpath(path))def browse_output(self):"""选择输出目录"""path = filedialog.askdirectory()if path:self.output_entry.delete(0, tk.END)self.output_entry.insert(0, os.path.normpath(path))def log_message(self, message):"""在日志区域显示消息"""self.log_text.insert(tk.END, message + "\n")self.log_text.see(tk.END)self.root.update_idletasks()def start_packing(self):"""启动打包过程"""script_path = self.script_entry.get()if not script_path:messagebox.showerror("错误", "请选择要打包的Python脚本!")returnif not os.path.exists(script_path):messagebox.showerror("错误", "指定的Python脚本不存在!")return# 构建PyInstaller命令cmd = ["pyinstaller", "--clean"]# 添加基本选项if self.onefile_var.get():cmd.append("--onefile")if self.noconsole_var.get():cmd.append("--onefile")cmd.append("--noconsole")# 添加图标if icon_path := self.icon_entry.get():if not os.path.exists(icon_path):messagebox.showerror("错误", "指定的图标文件不存在!")returncmd.extend(["--icon", f'"{icon_path}"'])# 添加版本信息if version_path := self.version_entry.get():if not os.path.exists(version_path):messagebox.showerror("错误", "版本信息文件不存在!")returncmd.extend(["--version-file", f'"{version_path}"'])# 添加输出目录if output_dir := self.output_entry.get():cmd.extend(["--distpath", f'"{output_dir}"'])cmd.append(f'"{script_path}"')# 初始化界面状态self.pack_btn.config(state=tk.DISABLED)self.log_text.delete(1.0, tk.END)self.log_message(">>> 开始打包命令: " + " ".join(cmd))# 启动后台线程执行打包命令threading.Thread(target=self.run_pack_command,args=(cmd,),daemon=True).start()def run_pack_command(self, cmd):"""执行打包命令"""try:process = subprocess.Popen(" ".join(cmd),stdout=subprocess.PIPE,stderr=subprocess.STDOUT,shell=True,encoding="utf-8",errors="replace")# 实时读取输出while True:output = process.stdout.readline()if output == "" and process.poll() is not None:breakif output:self.root.after(0, self.log_message, output.strip())# 处理返回结果return_code = process.poll()if return_code == 0:self.root.after(0, self.log_message, ">>> 打包成功完成!")self.root.after(0, messagebox.showinfo,"完成", "打包操作成功完成!")else:error_msg = f">>> 打包失败,错误码:{return_code}"self.root.after(0, self.log_message, error_msg)self.root.after(0, messagebox.showerror,"错误", f"打包失败,错误码:{return_code}")except Exception as e:error_msg = f">>> 发生异常错误:{str(e)}"self.root.after(0, self.log_message, error_msg)self.root.after(0, messagebox.showerror,"异常错误", f"发生未预期错误:{str(e)}")finally:self.root.after(0, self.pack_btn.config, {"state": tk.NORMAL})if __name__ == "__main__":root = tk.Tk()app = PyInstallerPacker(root)root.mainloop()

完毕!!感谢您的收看

----------★★跳转到历史博文集合★★----------
我的零基础Python教程,Python入门篇 进阶篇 视频教程 Py安装py项目 Python模块 Python爬虫 Json Xpath 正则表达式 Selenium Etree CssGui程序开发 Tkinter Pyqt5 列表元组字典数据可视化 matplotlib 词云图 Pyecharts 海龟画图 Pandas Bug处理 电脑小知识office自动化办公 编程工具 NumPy Pygame

相关文章:

Python项目75:PyInstaller+Tkinter+subprocess打包工具1.0(安排 !!)

这个打包工具包含以下功能: 1.主要功能:选择Python脚本文件,设置打包选项(单文件打包、无控制台窗口),自定义程序图标,指定输出目录,实时显示打包日志。 2.自适应布局改进&#xff…...

互联网大厂Java面试实录:从基础到微服务的深度考察

互联网大厂Java面试实录:从基础到微服务的深度考察 面试场景 面试官:风清扬(严肃且技术深厚) 求职者:令狐冲(技术扎实但偶尔含糊) 第一轮:Java基础与框架 风清扬:令狐…...

学习黑客5 分钟深入浅出理解Linux进程管理

5 分钟深入浅出理解Linux进程管理 🖥️ 大家好!今天我们将探索Linux系统中的进程管理——这是理解系统运行机制和进行安全分析的基础知识。在TryHackMe平台上进行网络安全学习时,了解进程如何工作以及如何监控和控制它们,对于识别…...

Kubernetes应用发布方式完整流程指南

Kubernetes(K8s)作为容器编排领域的核心工具,其应用发布流程体现了自动化、弹性和可观测性的优势。本文将通过一个Tomcat应用的示例,详细讲解从配置编写到高级发布的完整流程,帮助开发者掌握Kubernetes应用部署的核心步…...

JVM——即时编译器的中间表达形式

中间表达形式(IR):编译器的核心抽象层 1. IR的本质与作用 在编译原理的体系中,中间表达形式(Intermediate Representation, IR)是连接编译器前端与后端的桥梁。前端负责将源代码转换为IR,而后…...

Js 判断浏览器cookie 是否启用

验证时 google浏览器 135.0.7049.117 不生效 cookie.html <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><title>Cookie 检测</title> </head> <body><h1>检测是否启用 Cookie<…...

数字相机的快门结构

数字相机(DC/DSLR等)的快门结构和传统相机有所不同,除了机械快门以外,还存在电子快门,实际上是二者的混合体。我写这篇文章大概介绍一下数字相机的快门结构,希望能抛砖引玉。 要讨论数字相机的快门结构,首先先要了解一下数字相机的结构分类,根据成像原理不同,数字相机大…...

LeetCode --- 448 周赛

题目列表 3536. 两个数字的最大乘积 3537. 填充特殊网格 3538. 合并得到最小旅行时间 3539. 魔法序列的数组乘积之和 一、两个数字的最大乘积 由于数据都是正数&#xff0c;所以乘积最大的两个数&#xff0c;本质就是找数组中最大的两个数即可&#xff0c;可以排序后直接找到…...

添加物体.

在cesium中我们可以添加物体进入地图.我们以广州塔为例 //生成广州塔的位置var position2 Cesium.Cartesian3.fromDegrees(113.3191,23.109,100)viewer.camera.setView({//指定相机位置destination: position2, 运行后如图 我们使用cesium官网提供的代码为广州塔在地图上标点…...

ABB电机控制和保护单元与Profibus DP主站转Modbus TCP网关快速通讯案例

ABB电机控制和保护单元与Profibus DP主站转Modbus TCP网关快速通讯案例 在现代工业自动化系统中&#xff0c;设备之间的互联互通至关重要。Profibus DP和Modbus TCP是两种常见的通信协议&#xff0c;分别应用于不同的场景。为了实现这两种协议的相互转换&#xff0c;Profibus …...

Yocto中`${S}`和`${WORKDIR}`的联系与区别

在Yocto项目中,${S}和${WORKDIR}是构建过程中两个核心路径变量,它们的关系及用途如下: 定义与层级关系${WORKDIR}(工作目录) 是Recipe所有任务执行的基础目录,路径结构为: build/tmp/work/<arch>/<recipe-name>/<version>/。 该目录包含源码解压后的所…...

CDGP历次主观题真题回忆

(一)【论述】 1如何设计企业的数据安全体系?活动+方法+DSMM 2如何管理公司混乱的数据质量?活动+遵循原则+建立质量维度+质量改进生命周期+高阶指标。...

Java学习手册:Spring Cloud 组件详解

一、服务发现组件 - Eureka 核心概念 &#xff1a;Eureka 是一个服务发现组件&#xff0c;包含 Eureka Server 和 Eureka Client 两部分。Eureka Server 作为服务注册中心&#xff0c;负责维护服务实例的注册信息&#xff1b;Eureka Client 则是集成在应用中的客户端&#xff0…...

【大模型】使用 LLaMA-Factory 进行大模型微调:从入门到精通

使用 LLaMA-Factory 进行模型微调&#xff1a;从入门到精通 一、环境搭建&#xff1a;奠定微调基础&#xff08;一&#xff09;安装依赖工具&#xff08;二&#xff09;创建 conda 环境&#xff08;三&#xff09;克隆仓库并安装依赖 二、数据准备&#xff1a;微调的基石&#…...

sensitive-word-admin v2.0.0 全新 ui 版本发布!vue+前后端分离

前言 sensitive-word-admin 最初的定位是让大家知道如何使用 sensitive-word&#xff0c;所以开始想做个简单的例子。 不过秉持着把一个工具做好的原则&#xff0c;也收到很多小伙伴的建议。 v2.0.0 在 ruoyi-vue&#xff08;也非常感谢若依作者多年来的无私奉献&#xff09…...

HTML属性

HTML&#xff08;HyperText Markup Language&#xff09;是网页开发的基石&#xff0c;而属性&#xff08;Attribute&#xff09;则是HTML元素的重要组成部分。它们为标签提供附加信息&#xff0c;控制元素的行为、样式或功能。本文将从基础到进阶&#xff0c;全面解析HTML属性…...

计算机网络 4-1 网络层(网络层的功能)

【考纲内容】 &#xff08;一&#xff09;网络层的功能 异构网络互连&#xff1b;路由与转发&#xff1b;SDN基本概念&#xff1b;拥塞控制 &#xff08;二&#xff09;路由算法 静态路由与动态路由&#xff1b;距离-向量路由算法&#xff1b;链路状态路由算法&#xff1b;层…...

《算法导论(第4版)》阅读笔记:p17-p27

《算法导论(第4版)》学习第 10 天&#xff0c;p17-p27 总结&#xff0c;总计 11 页。 一、技术总结 1. insertion sort (1)keys The numbers to be sorted are also known as the keys(要排序的数称为key)。 第 n 次看插入排序&#xff0c;这次有两个地方感触比较深&#…...

C++中线程安全的对多个锁同时加锁

C中线程安全的对多个锁同时加锁 C中线程安全的对两个锁同时加锁 C中线程安全的对两个锁同时加锁 参考文档&#xff1a;https://llfc.club/articlepage?id2UVOC0CihIdfguQFmv220vs5hAG 如果我们现在有一个需要互斥访问的变量 big_object&#xff0c;它的定义如下&#xff1a; …...

子串简写(JAVA)一维前缀和, 蓝桥杯

这个题用前缀和&#xff0c;开两个数组&#xff0c;一个存前n个字符数据的c1的数字个数&#xff0c;另一个前n个字符c2的数字个数&#xff0c;然后遍历一次加起来&#xff0c;有一个测试点没过去&#xff0c;把那个存最后数的换成long&#xff0c;应该是这题数据范围给的不对&a…...

数据库故障排查全攻略:从实战案例到体系化解决方案

一、引言&#xff1a;数据库故障为何是技术人必须攻克的 "心腹大患" 在数字化时代&#xff0c;数据库作为企业核心数据资产的载体&#xff0c;其稳定性直接决定业务连续性。据 Gartner 统计&#xff0c;企业每小时数据库 downtime 平均损失高达 56 万美元&#xff0…...

vllm笔记

目录 vllm简介vllm解决了哪些问题&#xff1f;1. **瓶颈&#xff1a;KV 缓存内存管理低效**2. **瓶颈&#xff1a;并行采样和束搜索中的内存冗余**3. **瓶颈&#xff1a;批处理请求中的内存碎片化** 快速开始安装vllm开始使用离线推理启动 vLLM 服务器 支持的模型文本语言模型生…...

“AI+城市治理”智能化解决方案

目录 一、建设背景 二、需求分析 三、系统设计 四、系统功能 五、应用场景 六、方案优势 七、客户价值 八、典型案例 一、建设背景 当前我国城市化率已突破65%,传统治理模式面临前所未有的挑战。一方面,城市规模扩大带来治理复杂度呈指数级增长,全国城市管理案件年…...

《医疗AI的透明革命:破解黑箱困境与算法偏见的治理之路》

医疗AI透明度困境 黑箱问题对医生和患者信任的影响&#xff1a;在医疗领域&#xff0c;AI模型往往表现为难以理解的“黑箱”&#xff0c;这会直接影响医生和患者对其诊断建议的信任度 。医生如果无法理解AI给出诊断的依据&#xff0c;就难以判断模型是否存在偏见或错误&#x…...

【论文阅读】Efficient and secure federated learning against backdoor attacks

Efficient and secure federated learning against backdoor attacks -- 高效且安全的可抵御后门攻击的联邦学习 论文来源问题背景TLDR系统及威胁模型实体威胁模型 方法展开服务器初始化本地更新本地压缩高斯噪声与自适应扰动聚合与解压缩总体算法 总结优点缺点 论文来源 名称…...

21、DeepSeekMath论文笔记(GRPO)

DeepSeekMath论文笔记 0、研究背景与目标1、GRPO结构GRPO结构PPO知识点**1. PPO的网络模型结构****2. GAE&#xff08;广义优势估计&#xff09;原理****1. 优势函数的定义**2.GAE&#xff08;广义优势估计&#xff09; 2、关键技术与方法3、核心实验结果4、结论与未来方向关键…...

深入解析:如何基于开源p-net快速开发Profinet从站服务

一、Profinet协议与软协议栈技术解析 1.1 工业通信的"高速公路" Profinet作为工业以太网协议三巨头之一,采用IEEE 802.3标准实现实时通信,具有: 实时分级:支持RT(实时)和IRT(等时实时)通信模式拓扑灵活:支持星型、树型、环型等多种网络结构对象模型:基于…...

腾讯多模态定制化视频生成框架:HunyuanCustom

HunyuanCustom 速读 一、引言 HunyuanCustom 是由腾讯团队提出的一款多模态定制化视频生成框架。该框架旨在解决现有视频生成方法在身份一致性(identity consistency)和输入模态有限性方面的不足。通过支持图像、音频、视频和文本等多种条件输入&#xff0c;HunyuanCustom 能…...

警惕C#版本差异多线程中的foreach陷阱

警惕C#版本差异多线程中的foreach陷阱​ 同样的代码,不同的结果闭包捕获的“时间差”问题绕过闭包陷阱的三种方法Lambda立即捕获(代码简洁)显式传递参数(兼容性最佳)使用Parallel.ForEach(官方推荐)注意事项:版本兼容性指南警惕多线程中的foreach陷阱:C#版本差异引发的…...

2024年AI发展趋势全面解析:从多模态到AGI的突破

2024年AI发展五大核心趋势 1. 多模态AI的爆发式增长 GPT-4V、Gemini等模型实现文本/图像/视频的跨模态理解应用场景扩展至智能客服、内容创作、工业质检等领域 2. 小型化与边缘AI的崛起 手机端LLM&#xff08;如Phi-2&#xff09;实现本地化部署隐私保护与实时响应的双重优…...

高精度之加减乘除之多解总结(加与减篇)

开篇总述&#xff1a;精度计算的教学比较杂乱&#xff0c;无系统的学习&#xff0c;且存在同法多线的方式进行同一种运算&#xff0c;所以我写此篇的目的只是为了直指本质&#xff0c;不走教科书方式&#xff0c;步骤冗杂。 一&#xff0c;加法 我在此讲两种方法&#xff1a; …...

Arduino 开源按键库大合集(单击/双击/长按实现)

2025.5.10 22:25更新&#xff1a;增加了Button2 2025.5.10 13:13更新&#xff1a;增加了superButton 虽然Arduino自带按键中断attachInterrupt(button1.PIN, isr, FALLING);&#xff0c;但是要是要实现去抖&#xff0c;双击检测&#xff0c;长按检测等等就略微麻烦些&#xff0…...

相机Camera日志分析之八:高通Camx HAL架构opencamera三级日志详解及关键字

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:相机Camera日志分析之七:高通Camx HAL架构opencamera二级日志详解及关键字 这一篇我们开始讲: 相机Camera日志分析之八:高通Camx HAL架构opencamera三级日志详解及关键字 目录 【关注我,后续持续…...

Java零组件实现配置热更新

在某些场景下&#xff0c;我们需要实现配置的热更新&#xff0c;但是又要实现软件即插即用的需求&#xff0c;这就使我们不能引入过多复杂的插件&#xff0c;而nacos等配置中心在分布式业务场景下对配置的管理起着很重要作用&#xff0c;为此需要想一些办法去代替它们而完成同样…...

Kotlin高阶函数多态场景条件判断与子逻辑

Kotlin高阶函数多态场景条件判断与子逻辑 fun main() {var somefun: (Int, Float) -> Longval a 4val b 5fsomefun multi()//if 某条件println(somefun.invoke(a, b))//if 某条件somefun add()println(somefun.invoke(a, b)) }fun multi(): (Int, Float) -> Long {re…...

Ethercat转Profinet网关如何用“协议翻译术“打通自动化产线任督二脉

Ethercat转Profinet网关如何用"协议翻译术"打通自动化产线任督二脉 将遗留的Profinet设备&#xff08;如传感器&#xff09;接入现代EtherCAT主站&#xff08;如Codesys控制器&#xff09;避免全面更换硬件。 作为一名电气工程师&#xff0c;我最近面临的一个挑战&a…...

每日算法刷题Day1 5.9:leetcode数组3道题,用时1h

1.LC寻找数组的中心索引(简单) 数组和字符串 - LeetBook - 力扣&#xff08;LeetCode&#xff09;全球极客挚爱的技术成长平台 思想: 计算总和和左侧和&#xff0c;要让左侧和等于右侧和&#xff0c;即左侧和总和-左侧和-当前数字 代码 c代码: class Solution { public:i…...

MySQL的视图

一、MySQL视图的介绍和作用 MySQL视图&#xff0c;加油兄弟们&#xff0c;孰能生巧&#xff0c;完整代码在最后&#xff01;&#xff01;&#xff01; 视图是一个虚拟的表&#xff0c;并不是真是存在的&#xff0c;视图其实并没有真实的数据&#xff0c;他只是根据一个sql语句…...

旅游推荐数据分析可视化系统算法

旅游推荐数据分析可视化系统算法 本文档详细介绍了旅游推荐数据分析可视化系统中使用的各种算法&#xff0c;包括推荐算法、数据分析算法和可视化算法。 目录 推荐算法 基于用户的协同过滤推荐基于浏览历史的推荐主题推荐算法 亲子游推荐算法文化游推荐算法自然风光推荐算法…...

Pandas:数据处理与分析

目录 一、Pandas 简介 二、Pandas 的安装与导入 三、Pandas 的核心数据结构 &#xff08;一&#xff09;Series &#xff08;二&#xff09;DataFrame 四、Pandas 数据读取与写入 &#xff08;一&#xff09;读取数据 &#xff08;二&#xff09;写入数据 五、数据清洗…...

非阻塞式IO-Java NIO

一、NIO简介 Java NIO是Java1.4引入的一种新的IO API&#xff0c;它提供了非阻塞式IO&#xff0c;选择器、通道、缓冲区等新的概念和机制。相比传统的IO&#xff0c;多出的N不单纯是新的&#xff0c;更表现在Non-blocking非阻塞&#xff0c;NIO具有更高的并发性、可扩展性以及…...

tryhackme——Enumerating Active Directory

文章目录 一、凭据注入1.1 RUNAS1.2 SYSVOL1.3 IP和主机名 二、通过Microsoft Management Console枚举AD三、通过命令行net命令枚举四、通过powershell枚举 一、凭据注入 1.1 RUNAS 当获得AD凭证<用户名>:<密码>但无法登录域内机器时&#xff0c;runas.exe可帮助…...

(二)Linux下基本指令 2

【知识预告】 16. date 指令 17. cal 指令 18. find 指令 19. which指令 20. whereis 指令 21. alias 指令 22. grep 指令 23. zip/unzip 指令 24. tar 指令 25. bc 指令 26. uname ‒r 指令 27. 重要的⼏个热键 28. 关机 16 date 指令 指定格式显⽰时间&#xff1a;date %Y-…...

[ctfshow web入门] web70

信息收集 使用cinclude("php://filter/convert.base64-encode/resourceindex.php");读取的index.php error_reporting和ini_set被禁用了&#xff0c;不必管他 error_reporting(0); ini_set(display_errors, 0); // 你们在炫技吗&#xff1f; if(isset($_POST[c])){…...

第三章 Freertos智能小车遥控控制

本文基于小车APP&#xff0c;通过与蓝牙模块进行连接&#xff0c;发送特定信号给小车主控&#xff0c;实现对小车的模式切换、灯光控制、前进、后退、左右控制。目前还未加入电机控制&#xff0c;具体的电机控制效果还不能实现&#xff0c;但是可以进行模式切换与灯光控制。 …...

Spring 6.x 详解介绍

Spring 6.x 是 Spring Framework 的最新主版本&#xff0c;于2022年11月正式发布&#xff0c;标志着对 Java 17 和 Jakarta EE 9 的全面支持&#xff0c;同时引入了多项革新性特性&#xff0c;旨在优化性能、简化开发并拥抱现代技术趋势。 一、核心特性与架构调整 Java 17 与 J…...

阿里云OSS+CDN自动添加文章图片水印配置指南

文章目录 一、环境准备二、OSS水印样式配置三、CDN关键配置四、Handsome主题自动化配置五、水印效果验证六、常见问题排查 一、环境准备 资源清单 阿里云OSS Bucket&#xff08;绑定自定义域名 static.example.com&#xff09;阿里云CDN加速域名&#xff0c;回源为Bucket的域名…...

hot100-子串-JS

一、560.和为k的子串 560. 和为 K 的子数组 提示 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,1], k 2 输出&#xff1a;2示例 2…...

LeetCode 270:在二叉搜索树中寻找最接近的值(Swift 实战解析)

文章目录 摘要描述题解答案题解代码分析示例测试及结果时间复杂度空间复杂度总结 摘要 在日常开发中&#xff0c;我们经常需要在一组有序的数据中快速找到最接近某个目标值的元素。LeetCode 第 270 题“Closest Binary Search Tree Value”正是这样一个问题。本文将深入解析该…...

《操作系统真象还原》第十三章——编写硬盘驱动程序

文章目录 前言硬盘及分区表创建从盘及获取安装的磁盘数创建磁盘分区表硬盘分区表浅析 编写硬盘驱动程序硬盘初始化修改interrupt.c编写ide.h编写ide.c 实现thread_yield和idle线程修改thread.c 实现简单的休眠函数修改timer.c 完善硬盘驱动程序继续编写ide.c 获取硬盘信息&…...