Python的psutil库,源码简单阅读

背景部分(废话部分):

今天使用自己写的程序,发现mac地址校验通不过了。(程序为了设置使用权限,简单的使用了电脑的mac地址作为校验)
通过调试发现,有一堆的“本地连接*”的东西存在,干扰了mac地址的获取。
在这里插入图片描述

于是准备将本地的多余“本地连接”删除,查了半天之后,发现依然没用,就打断点调试,看看psutil这个库,是怎么获取到电脑的mac地址的。

阅读过程:

通过步入,发现调用的是net_if_addrs函数,红框部分,是这个函数调用的函数
在这里插入图片描述

再次查看调用发现,它是来自一个叫cext的类,而这个cext的类,又是通过叫_psutil_windows的引入的,这个时候,再查看源代码,就找不到相关引用了。
在这里插入图片描述
在网上查看相关资料以后,发现它找不到代码的原因其实是,_psutil_windows这个不是py文件,而是一个pyd文件。
“pyd一般是python外的其他语言如C/C++编写的python扩展模块,即python的一个动态链接库,与dll文件相当。在linux系统中一般为.so文件。也有的时候,为了对python文件进行加密,会把python模块编译成.pyd文件,供其他人使用。”
在这里插入图片描述
这么看下来之后,psutil能获取电脑的mac地址,大概是通过了C语言家族等获取到的。

到这里并没有结束,为了确定猜想,在git上,打开psutil的项目源码,赫然发现约有37%的部分,是C语言写的。
在这里插入图片描述
再次深入查看,发现C语言写了_psutil_windows这个文件,里面提到了net_if_addrs这个部分
在这里插入图片描述
打开这个C之后,发现它获取mac的部分,来自于引用的net.h包,由于对C语言的学习,止步于大一,并且当时还是双语讲课,导致基础薄弱,接下来就不再对其进行深入探索了。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
psutil是一个跨平台的Python,用于检索有关运行中进程和系统利用率(CPU,内存,磁盘,网络,传感器)的信息。它可以帮助我们实现系统监控、进程管理、性能分析等功能。以下是psutil的一些基本用法: 1.安装psutil ```shell pip install psutil ``` 2.获取CPU信息 ```python import psutil # 获取CPU逻辑数量 print("CPU逻辑数量:", psutil.cpu_count()) # 获取CPU物理核心 print("CPU物理核心:", psutil.cpu_count(logical=False)) # 获取CPU使用率,每秒刷新一次,累计10次 for i in range(10): print("CPU使用率:", psutil.cpu_percent(interval=1, percpu=True)) ``` 3.获取内存信息 ```python import psutil # 获取内存信息 mem = psutil.virtual_memory() print("内存总量:", mem.total) print("内存使用量:", mem.used) print("内存空闲量:", mem.free) print("内存使用率:", mem.percent) ``` 4.获取磁盘信息 ```python import psutil # 获取磁盘分区信息 partitions = psutil.disk_partitions() for partition in partitions: print("磁盘分区:", partition.device) print("文件系统类型:", partition.fstype) print("磁盘分区挂载点:", partition.mountpoint) print("磁盘分区总容量:", psutil.disk_usage(partition.mountpoint).total) print("磁盘分区使用容量:", psutil.disk_usage(partition.mountpoint).used) print("磁盘分区空闲容量:", psutil.disk_usage(partition.mountpoint).free) print("磁盘分区使用率:", psutil.disk_usage(partition.mountpoint).percent) ``` 5.获取网络信息 ```python import psutil # 获取网络接口信息 net_io = psutil.net_io_counters() print("网络总字节数:", net_io.bytes_sent + net_io.bytes_recv) print("网络总包数:", net_io.packets_sent + net_io.packets_recv) # 获取网络连接信息 connections = psutil.net_connections() for conn in connections: print("本地地址:", conn.laddr) print("远程地址:", conn.raddr) print("状态:", conn.status) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值