第五代计算机相关信息,计算机具有强大的信息获取
墨初 知识笔记 29阅读
6.15 获取计算机相关信息Psutil
psutil 是一个跨平台的库用于获取进程和系统运行状态CPU、内存、磁盘、网络、传感器的信息。它主要用于系统监视、分析和限制进程资源以及管理正在运行的进程。psutil 支持 Linux、Windows、macOS、FreeBSD、OpenBSD、NetBSD 和 Sun Solaris 等操作系统。
psutil 库可以用来获取以下信息

进程信息包括进程ID、进程名称、进程状态等。
CPU信息包括CPU数量、CPU使用率、每个CPU的使用率等。
内存信息包括总内存、已使用内存、空闲内存等。
磁盘信息包括磁盘使用率、磁盘IO等。
网络信息包括网络接口、网络连接数等。
传感器信息包括温度、湿度等信息。
psutil 库可以通过以下方式使用
获取进程信息
可以使用 psutil.Process(pid) 方法获取指定进程的信息其中 pid 是进程ID。获取系统信息
可以使用 psutil.virtual_memory() 和 psutil.cpu_percent(interval1) 等方法获取系统信息。监控磁盘信息
可以使用 psutil.disk_usage(‘/’) 方法获取磁盘使用率信息。监控网络信息
可以使用 psutil.net_io_counters() 方法获取网络IO信息。管理进程
可以使用 psutil.Process(pid).kill() 方法杀死指定进程。
总之psutil库是一个非常实用的库可以用来获取系统和进程的详细信息并对进程进行管理。

查看操作系统相关信息
import psutilfrom datetime import datetimeUsers psutil.users() # 查看当前登录的用户信息列表类型。包括name: 用户名 terminal: 终端 host: 主机地址 started: 登录时间 pid: 进程idBootTime datetime.fromtimestamp(psutil.boot_time()) # 查看系统的启动时间 2022-12-12 08:40:05
查看CPU相关信息
import psutilCpuLogicCoreCount psutil.cpu_count() # CPU逻辑核心数 8CpuPhysicalCoreCount psutil.cpu_count(logicalFalse) # CPU物理核心数 4CPUPercent psutil.cpu_percent(interval1, percpuTrue) # CPU使用率列表显示interval表示刷新间隔列表中的元素代表每个CPU逻辑核心 [6.1, 1.5, 4.6, 7.7, 10.8, 1.5, 1.5, 1.5]CPUFreq psutil.cpu_freq() # CPU频率 scpufreq(current3408.0, min0.0, max3408.0)
查看内存相关信息
import psutilVirtualMemory psutil.virtual_memory() # 内存使用情况 svmem(total8480059392, available1381511168, percent83.7, used7098548224, free1381511168) total: 总内存 available: 可用内存
查看硬盘存储和IO相关信息
import psutilDiskPartitions psutil.disk_partitions(allTrue)[sdiskpart(deviceC:\\, mountpointC:\\, fstypeNTFS, optsrw,fixed), sdiskpart(deviceD:\\, mountpointD:\\, fstypeNTFS, optsrw,fixed), sdiskpart(deviceE:\\, mountpointE:\\, fstypeNTFS, optsrw,fixed)]# 可以看到一共有三个盘符fstype表示文件系统格式是NTFSopts中的rw表示可读写# 里面有一个参数 all, 默认为 False, 如果指定为 True, 那么返回的内容还会包含 /proc 等特殊文件系统的挂载信息由于我这里是 Windows, 所以两者没区别DiskUsage psutil.disk_usage(C:) # 磁盘使用情况 sdiskusage(total84821807104, used66361847808, free18459959296, percent78.2)DiskIOCounters psutil.disk_io_counters(perdiskFalse) # 磁盘IO统计信息 sdiskio(read_count4612339, write_count1834298, read_bytes116422007808, write_bytes61427764224, read_time12831, write_time4321)read_count: 读次数 write_count: 写次数read_bytes: 读的字节数 write_bytes: 写的字节数read_time: 读时间 write_time: 写时间默认返回的是所有磁盘加起来的统计信息我们可以指定 perdiskTrue则分别列出每一个磁盘的统计信息。
查看网络相关信息
import psutilNetIOCounters psutil.net_io_counters(pernicFalse) # 网络 IO 统计信息 snetio(bytes_sent873520263, bytes_recv311085337, packets_sent1091582, packets_recv1259384, errin0, errout0, dropin0, dropout0)# bytes_sent: 发送的字节数# bytes_recv: 接收的字节数# packets_sent: 发送的包数据量# packets_recv: 接收的包数据量# errin: 接收包时, 出错的次数# errout: 发送包时, 出错的次数# dropin: 接收包时, 丢弃的次数# dropout: 发送包时, 丢弃的次数里面还有一个 pernic 参数, 如果为 True, 则列出所有网卡的信息NetIfAddrs psutil.net_if_addrs() # 以字典的形式返回网卡的配置信息, 包括 IP 地址、Mac地址、子网掩码、广播地址等等{Loopback Pseudo-Interface 1: [snicaddr(family<AddressFamily.AF_INET: 2>, address127.0.0.1, netmask255.0.0.0, broadcastNone, ptpNone), snicaddr(family<AddressFamily.AF_INET6: 23>, address::1, netmaskNone, broadcastNone, ptpNone)], 本地连接: [snicaddr(family<AddressFamily.AF_LINK: -1>, address10-E7-C6-2D-AB-2C, netmaskNone, broadcastNone, ptpNone), snicaddr(family<AddressFamily.AF_INET: 2>, address10.36.23.50, netmask255.255.255.0, broadcastNone, ptpNone), snicaddr(family<AddressFamily.AF_INET6: 23>, addressfe80::d472:4d86:72f6:4da1, netmaskNone, broadcastNone, ptpNone)]}NetIfStats psutil.net_if_stats() # 返回网卡的详细信息, 包括是否启动、通信类型、传输速度、mtu{Loopback Pseudo-Interface 1: snicstats(isupTrue, duplex<NicDuplex.NIC_DUPLEX_FULL: 2>, speed1073, mtu1500), 本地连接: snicstats(isupTrue, duplex<NicDuplex.NIC_DUPLEX_FULL: 2>, speed100, mtu1500)}NetConnections psutil.net_connections(kindinet) # 以列表的形式返回每个网络连接的详细信息[sconn(fd-1, family<AddressFamily.AF_INET: 2>, type1, laddraddr(ip127.0.0.1, port57096), raddraddr(ip127.0.0.1, port57095), statusESTABLISHED, pid7456), sconn(fd-1, family<AddressFamily.AF_INET: 2>, type1, laddraddr(ip127.0.0.1, port57230), raddraddr(ip127.0.0.1, port57229), statusESTABLISHED, pid20992), sconn(fd-1, family<AddressFamily.AF_INET: 2>, type1, laddraddr(ip127.0.0.1, port57184), raddraddr(ip127.0.0.1, port57251), statusESTABLISHED, pid20992)]...里面接受一个参数, 默认是 inet, 当然我们也可以指定为其它, 比如 tcp
标签: