十四:Python学习笔记--基础知识完结(12)写几个案例 打包exe出来 齐活

目录

案例一:系统监控工具

案例二: 假设 多台电脑  在局域网中 只有一台电脑可以连接外网, 内网的数据必须要传递到外网电脑

内网:

外网:

程序打包


案例一:系统监控工具

  • 加载配置:从 config.json 文件中读取要监控的端口列表。

  • 端口检查:检查指定的端口是否正在被使用。

  • 系统信息收集

    • CPU 信息:获取 CPU 使用率和核心数。
    • 内存信息:获取虚拟内存和交换内存的状态。
    • 磁盘信息:列出所有磁盘分区及其使用情况,包括总容量、已用容量、剩余容量和使用率。
    • 网络信息:获取网络 I/O 统计和网络接口的地址信息。
    • 进程数量:统计当前运行的进程数量。
  • 循环监控:每五秒钟重复获取并打印上述系统信息,同时监控指定端口的状态,输出每个端口的运行状态。

  • 异常处理:在数据收集和打印过程中捕获并输出可能发生的错误。

import sys
import psutil
import time
import json
import osdef load_config():# 获取 .exe 所在目录的路径base_path = os.path.dirname(os.path.abspath(sys.argv[0]))config_path = os.path.join(base_path, 'config.json')# 检查配置文件是否存在if not os.path.exists(config_path):print(f"配置文件 {config_path} 未找到!")return []# 读取配置文件内容with open(config_path, 'r') as f:config = json.load(f)return config.get("monitor_ports", [])def is_port_in_use(port):# 检查指定端口是否在使用for conn in psutil.net_connections(kind='inet'):if conn.laddr.port == port and conn.status == psutil.CONN_LISTEN:return Truereturn Falsedef get_system_info():monitor_ports = load_config()  # 加载要监控的端口while True:try:# 获取 CPU 信息cpu_percent = psutil.cpu_percent(interval=1)cpu_count = psutil.cpu_count(logical=True)# 获取内存信息virtual_memory = psutil.virtual_memory()swap_memory = psutil.swap_memory()# 获取磁盘信息disk_partitions = psutil.disk_partitions()disk_info = []for partition in disk_partitions:partition_usage = psutil.disk_usage(partition.mountpoint)disk_info.append({'device': partition.device,'mountpoint': partition.mountpoint,'fstype': partition.fstype,'total': partition_usage.total,'used': partition_usage.used,'free': partition_usage.free,'percent': partition_usage.percent,})disk_io = psutil.disk_io_counters()# 获取网络信息net_io = psutil.net_io_counters()net_if_addrs = psutil.net_if_addrs()# 获取进程数量process_count = len(psutil.pids())# 打印系统信息print("\n=== 系统信息 ===")print(f"CPU 使用率: {cpu_percent}%")print(f"CPU 核心数: {cpu_count}")print(f"虚拟内存: {virtual_memory}")print(f"交换内存: {swap_memory}")# 打印磁盘信息print("\n=== 磁盘信息 ===")for info in disk_info:print(f"设备: {info['device']}")print(f"挂载点: {info['mountpoint']}")print(f"文件系统类型: {info['fstype']}")print(f"总容量: {info['total'] / (1024 ** 3):.2f} GB")print(f"已使用: {info['used'] / (1024 ** 3):.2f} GB")print(f"剩余: {info['free'] / (1024 ** 3):.2f} GB")print(f"使用率: {info['percent']}%")print("----------")print(f"磁盘 I/O: 读 {disk_io.read_count}, 写 {disk_io.write_count}, 读字节 {disk_io.read_bytes}, 写字节 {disk_io.write_bytes}")# 打印网络信息print(f"网络 I/O: {net_io}")print("网络接口地址:")for interface, addrs in net_if_addrs.items():print(f"  {interface}: {[addr.address for addr in addrs if addr.family == psutil.AF_LINK]}")print(f"当前进程数量: {process_count}")# 监控指定端口状态print("\n=== 端口监控 ===")for port in monitor_ports:status = "运行中" if is_port_in_use(port) else "未运行"print(f"端口 {port}: {status}")except Exception as e:print(f"发生错误: {e}")# 每五秒钟获取一次time.sleep(5)# 调用函数
get_system_info()
{"monitor_ports": [80, 443, 8080]
}

案例二: 假设 多台电脑  在局域网中 只有一台电脑可以连接外网, 内网的数据必须要传递到外网电脑

1. 主程序(服务器)

  • 监听连接:在本地的5000端口上创建一个TCP服务器,等待客户端的连接请求。

  • 接受客户端连接:当接收到来自客户端的连接时,打印出连接的客户端地址,并关闭连接。

2. 从程序(客户端)

  • 网络扫描:在指定的子网(如192.168.1.0/24)中,逐个IP地址尝试连接主程序的5000端口。

  • 连接检测:如果成功连接到主程序,打印出主程序的IP地址;如果没有找到主程序,则输出相应的信息。

内网:

import socket
import ipaddressdef find_master():# 假设在 192.168.1.0/24 网段subnet = "192.168.1.0/24"port = 5000for ip in ipaddress.IPv4Network(subnet):print(f"正在寻找:{ip}")with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:s.settimeout(0.5)  # 设置超时时间,避免长时间等待try:s.connect((str(ip), port))print(f"找到主程序,地址:{ip}")return str(ip)  # 返回主程序的 IPexcept (socket.timeout, ConnectionRefusedError):pass  # 尝试下一个 IPprint("未找到主程序")return None
find_master()

外网:

import socketdef start_master():# 主程序监听的端口host = '0.0.0.0'  # 接收来自任何地址的连接port = 5000with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:s.bind((host, port))s.listen()print(f"主程序在端口 {port} 上等待从程序连接...")while True:conn, addr = s.accept()print(f"接收到从程序连接,地址:{addr}")conn.close()start_master()

程序打包

安装pyinstaller

pip install pyinstaller

打开终端  到你程序所在的目录

执行

pyinstaller --onefile main_script.py

就可以看见执行文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/459068.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HDU - 2588 GCD

题目大意:两个正整数 a 和 b 的最大公约数 GCD(a,b),有时写成 (a,b),是 a 和 b 的最大公约数,例如,(1,2)1,&am…

【笔记】大模型长度外推技术 NTK-Aware Scaled RoPE

NTK-Aware Scaled RoPE 正弦编码(Sinusoidal)旋转位置编码RoPE编码步骤:旋转位置编码的优势 NTK-Aware Scaled RoPE直接外推线性内插进制转换高频外推、低频内插的理解位置编码 总结参考: 长度外推技术是自然语言处理(NLP)领域中&…

java中的二叉树

二叉树 树型结构概念相关概念树的表示形式树的应用 二叉树概念两种特殊的二叉树二叉树的性质二叉树的存储二叉树的基本操作前置说明二叉树的遍历二叉树的基本操作 二叉树相关OJ题 树型结构 概念 树是一种非线性的的数据结构,它是由n(n>0)个有限结点组成一个具有…

防静电监控系统为汽车电子工厂打造安全生产环境

汽车电子产品对静电极其敏感,微小的静电放电 (ESD) 都会导致元器件损坏,造成巨大的经济损失和产品质量问题。因此,在汽车电子工厂构建完善的ESD防静电防护体系至关重要。传统的防静电措施主要依赖人工巡检,效率低且难以保证实时监…

如何挑选项目管理软件?8款免费工具推荐

本文提及的8款免费优质项目管理软件有: 1.PingCode; 2.Worktile; 3.钉钉(Dingtalk); 4.金蝶项目管理; 5.ProcessOn; 6.简道云; 7.Jira; 8.Basecamp。 在如今快速发展的商…

51单片机 复位电路

上电复位 上电复位是为了程序执行到后面,突然关机,能够让电路能够回到初始状况 使用阻容(通交流隔直流)电路完成复位 电容上电有一个过程,充满电所需世界大于两个机器周期 电容电充满之后,电压拉为0v, 整个电路就复位了 如果电压一…

面向对象(下)

7.继承 继承的基础语法 学习目标:理解继承的概念,掌握继承的使用方式,掌握pass关键字的作用 就是把老的设计图继承下来,然后修修改改成为新的设计图 我们可以使用继承,来完成此需求。 单继承 从头写一个新的类&…

利用Django实现MySQL数据库的内容在网页的增删改写

利用Django实现MySQL数据库的内容在网页的增删改写 1.建立项目2.定义模型3.创建视图4.创建模板5.创建表单和配置url6.最后修改7.效果 1.建立项目 输入命令django-admin startproject aaa 新建项目,项目名称命名为aaa,打开aaa文件夹,命令提示…

Puppeteer 与浏览器版本兼容性:自动化测试的最佳实践

Puppeteer 支持的浏览器版本映射:从 v20.0.0 到 v23.6.0 自 Puppeteer v20.0.0 起,这个强大的自动化库开始支持与 Chrome 浏览器的无头模式和有头模式共享相同代码路径,为自动化测试带来了更多便利。从 v23.0.0 开始,Puppeteer 进…

大白话讲解分布式事务-SEATA事务四种模式(内含demo)

因为这里主要是讲解分布式事务,关于什么是事务,以及事务的特性,单个事务的使用方式,以及在Spring框架下,事务的传播方式,这里就不再赘述了。但是我这里要补充一点就是,一提到事务大家脑子里第一…

【LLM论文日更 | 一种引入上下文的文档嵌入方法 】

论文:​​​​​​​https://arxiv.org/pdf/2410.02525代码:暂未开源机构:康奈尔大学领域:embedding model发表:arxiv 研究背景 研究问题:这篇文章要解决的问题是如何改进文档嵌入,使其在特定上…

短短一年多,ChatGPT 发展到什么程序了?

短短一年多,ChatGPT 就与 Google、Youtube、X.com等大佬级网站比肩。成为全球访问量最大的网站之一 爆发期,访问量月增长率高达3000%左右。网站流量从1800万次访问激增至6.72亿次只花了60来天。 2023年一项AI产品访问量统计结果中ChatGPT占比60%&#xf…

信号反射与振铃

反射来源于阻抗不匹配,振铃就是多次反射 对于反射要记住传输系数与反射系数 传输系数与反射系数 振铃现象计算说明

Python轴承故障诊断 (15)基于CNN-Transformer的一维故障信号识别模型

往期精彩内容: Python-凯斯西储大学(CWRU)轴承数据解读与分类处理 Pytorch-LSTM轴承故障一维信号分类(一)-CSDN博客 Pytorch-CNN轴承故障一维信号分类(二)-CSDN博客 Pytorch-Transformer轴承故障一维信号分类(三)-CSDN博客 三十多个开源…

Spark原理

主要包括: 核心组件的运行机制(Master,Worker,SparkContext等)任务调度的原理Shuffile的原理内存管理数据倾斜处理Spark优化 核心组件的运行机制 Spark 执行任务的原理: Spark on Yarn: Cluster模型&am…

【数据结构-邻项消除】力扣1003. 检查替换后的词是否有效

给你一个字符串 s ,请你判断它是否 有效 。 字符串 s 有效 需要满足:假设开始有一个空字符串 t “” ,你可以执行 任意次 下述操作将 t 转换为 s : 将字符串 “abc” 插入到 t 中的任意位置。形式上,t 变为 tleft “…

GPT-4o 和 GPT-4 Turbo 模型之间的对比

GPT-4o 和 GPT-4 Turbo 之间的对比 备注 要弄 AI ,不同模型之间的对比就比较重要。 GPT-4o 是 GPT-4 Turbo 的升级版本,能够提供比 GPT-4 Turbo 更多的内容和信息,但成功相对来说更高一些。 第三方引用 在 2024 年 5 月 13 日&#xff0…

115页PPT华为管理变革:制度创新与文化塑造的核心实践

集成供应链(ISC)体系 集成供应链(ISC)体系是英文Integrated Supply Chain的缩写,是一种先进的管理思想,它指的是由相互间提供原材料、零部件、产品和服务的供应商、合作商、制造商、分销商、零售商、顾客等…

TCP simultaneous open测试

源代码 /*************************************************************************> File Name: common.h> Author: hsz> Brief:> Created Time: 2024年10月23日 星期三 09时47分51秒**********************************************************************…

ctfshow(175->178)--SQL注入--联合注入及其过滤

Web175 进入界面: 审计: 查询语句: $sql "select username,password from ctfshow_user5 where username !flag and id ".$_GET[id]." limit 1;";返回逻辑: if(!preg_match(/[\x00-\x7f]/i, json_enc…