Python怎么利用psutil实现获取硬件,网络和进程信息

发布时间:2022-07-22 13:45:21 作者:iii
来源:亿速云 阅读:272

Python怎么利用psutil实现获取硬件,网络和进程信息

目录

  1. 引言
  2. psutil简介
  3. 安装psutil
  4. 获取硬件信息
    1. CPU信息
    2. 内存信息
    3. 磁盘信息
    4. 传感器信息
  5. 获取网络信息
    1. 网络接口信息
    2. 网络连接信息
    3. 网络流量统计
  6. 获取进程信息
    1. 列出所有进程
    2. 获取进程详细信息
    3. 进程管理
  7. 高级用法
    1. 定时监控
    2. 跨平台兼容性
    3. 性能优化
  8. 实际应用案例
    1. 系统监控工具
    2. 网络流量分析
    3. 进程管理工具
  9. 总结

引言

在现代软件开发中,系统监控和管理是一个非常重要的环节。无论是服务器运维、性能调优,还是开发调试,获取系统的硬件、网络和进程信息都是必不可少的。Python作为一种功能强大且易于使用的编程语言,提供了丰富的库来帮助我们实现这些功能。其中,psutil库是一个非常优秀的工具,它能够轻松地获取系统的硬件信息、网络状态和进程信息。

本文将详细介绍如何使用psutil库来获取系统的硬件、网络和进程信息,并通过实际案例展示其强大的功能。

psutil简介

psutil(process and system utilities)是一个跨平台的Python库,用于检索系统运行的进程和系统利用率(CPU、内存、磁盘、网络、传感器)的信息。它支持多种操作系统,包括Linux、Windows、macOS、FreeBSD、OpenBSD、NetBSD、Sun Solaris等。

psutil的主要特点包括: - 跨平台支持 - 简单易用的API - 高效且轻量级 - 支持Python 2.7和Python 3.4+

安装psutil

在开始使用psutil之前,首先需要安装它。可以通过pip命令来安装:

pip install psutil

安装完成后,可以通过以下代码来验证是否安装成功:

import psutil
print(psutil.__version__)

如果输出了psutil的版本号,说明安装成功。

获取硬件信息

CPU信息

psutil提供了多种方法来获取CPU的相关信息,包括CPU的使用率、核心数、频率等。

获取CPU使用率

import psutil

# 获取CPU的使用率(百分比)
cpu_usage = psutil.cpu_percent(interval=1)
print(f"CPU使用率: {cpu_usage}%")

cpu_percent()方法可以获取CPU的使用率。interval参数表示采样的时间间隔,单位为秒。

获取CPU核心数

# 获取CPU的逻辑核心数
cpu_count = psutil.cpu_count(logical=True)
print(f"CPU逻辑核心数: {cpu_count}")

# 获取CPU的物理核心数
cpu_count_physical = psutil.cpu_count(logical=False)
print(f"CPU物理核心数: {cpu_count_physical}")

cpu_count()方法可以获取CPU的核心数。logical=True表示获取逻辑核心数,logical=False表示获取物理核心数。

获取CPU频率

# 获取CPU的当前频率
cpu_freq = psutil.cpu_freq()
print(f"CPU当前频率: {cpu_freq.current} MHz")
print(f"CPU最小频率: {cpu_freq.min} MHz")
print(f"CPU最大频率: {cpu_freq.max} MHz")

cpu_freq()方法可以获取CPU的当前频率、最小频率和最大频率。

内存信息

psutil提供了多种方法来获取内存的相关信息,包括物理内存、交换内存等。

获取物理内存信息

# 获取物理内存信息
mem_info = psutil.virtual_memory()
print(f"总内存: {mem_info.total / 1024 / 1024:.2f} MB")
print(f"可用内存: {mem_info.available / 1024 / 1024:.2f} MB")
print(f"已使用内存: {mem_info.used / 1024 / 1024:.2f} MB")
print(f"内存使用率: {mem_info.percent}%")

virtual_memory()方法可以获取物理内存的总量、可用量、已使用量和内存使用率。

获取交换内存信息

# 获取交换内存信息
swap_info = psutil.swap_memory()
print(f"总交换内存: {swap_info.total / 1024 / 1024:.2f} MB")
print(f"已使用交换内存: {swap_info.used / 1024 / 1024:.2f} MB")
print(f"交换内存使用率: {swap_info.percent}%")

swap_memory()方法可以获取交换内存的总量、已使用量和交换内存使用率。

磁盘信息

psutil提供了多种方法来获取磁盘的相关信息,包括磁盘分区、磁盘使用率、磁盘IO等。

获取磁盘分区信息

# 获取磁盘分区信息
disk_partitions = psutil.disk_partitions()
for partition in disk_partitions:
    print(f"设备: {partition.device}")
    print(f"挂载点: {partition.mountpoint}")
    print(f"文件系统类型: {partition.fstype}")
    print(f"挂载选项: {partition.opts}")
    print()

disk_partitions()方法可以获取系统中所有的磁盘分区信息,包括设备名称、挂载点、文件系统类型和挂载选项。

获取磁盘使用率

# 获取磁盘使用率
disk_usage = psutil.disk_usage('/')
print(f"总空间: {disk_usage.total / 1024 / 1024 / 1024:.2f} GB")
print(f"已使用空间: {disk_usage.used / 1024 / 1024 / 1024:.2f} GB")
print(f"可用空间: {disk_usage.free / 1024 / 1024 / 1024:.2f} GB")
print(f"磁盘使用率: {disk_usage.percent}%")

disk_usage()方法可以获取指定路径的磁盘使用情况,包括总空间、已使用空间、可用空间和磁盘使用率。

获取磁盘IO信息

# 获取磁盘IO信息
disk_io = psutil.disk_io_counters()
print(f"读取次数: {disk_io.read_count}")
print(f"写入次数: {disk_io.write_count}")
print(f"读取字节数: {disk_io.read_bytes / 1024 / 1024:.2f} MB")
print(f"写入字节数: {disk_io.write_bytes / 1024 / 1024:.2f} MB")

disk_io_counters()方法可以获取磁盘的IO信息,包括读取次数、写入次数、读取字节数和写入字节数。

传感器信息

psutil还提供了获取传感器信息的功能,包括温度、风扇转速等。

获取温度信息

# 获取温度信息
temps = psutil.sensors_temperatures()
for name, entries in temps.items():
    print(f"传感器: {name}")
    for entry in entries:
        print(f"  {entry.label}: {entry.current}°C")

sensors_temperatures()方法可以获取系统中所有温度传感器的信息。

获取风扇转速信息

# 获取风扇转速信息
fans = psutil.sensors_fans()
for name, entries in fans.items():
    print(f"风扇: {name}")
    for entry in entries:
        print(f"  {entry.label}: {entry.current} RPM")

sensors_fans()方法可以获取系统中所有风扇的转速信息。

获取网络信息

网络接口信息

psutil提供了多种方法来获取网络接口的相关信息,包括IP地址、MAC地址、网络接口状态等。

获取网络接口信息

# 获取网络接口信息
net_if_addrs = psutil.net_if_addrs()
for interface_name, interface_addresses in net_if_addrs.items():
    print(f"接口: {interface_name}")
    for address in interface_addresses:
        print(f"  地址族: {address.family}")
        print(f"  地址: {address.address}")
        print(f"  网络掩码: {address.netmask}")
        print(f"  广播地址: {address.broadcast}")
        print(f"  P2P地址: {address.ptp}")
        print()

net_if_addrs()方法可以获取系统中所有网络接口的地址信息,包括IP地址、MAC地址、网络掩码、广播地址和P2P地址。

获取网络接口状态

# 获取网络接口状态
net_if_stats = psutil.net_if_stats()
for interface_name, stats in net_if_stats.items():
    print(f"接口: {interface_name}")
    print(f"  是否启用: {stats.isup}")
    print(f"  双工模式: {stats.duplex}")
    print(f"  速度: {stats.speed} Mbps")
    print(f"  MTU: {stats.mtu}")
    print()

net_if_stats()方法可以获取系统中所有网络接口的状态信息,包括是否启用、双工模式、速度和MTU。

网络连接信息

psutil提供了多种方法来获取网络连接的相关信息,包括TCP连接、UDP连接等。

获取TCP连接信息

# 获取TCP连接信息
tcp_connections = psutil.net_connections(kind='tcp')
for conn in tcp_connections:
    print(f"协议: {conn.type}")
    print(f"本地地址: {conn.laddr}")
    print(f"远程地址: {conn.raddr}")
    print(f"状态: {conn.status}")
    print(f"进程ID: {conn.pid}")
    print()

net_connections()方法可以获取系统中所有的TCP连接信息,包括协议、本地地址、远程地址、状态和进程ID。

获取UDP连接信息

# 获取UDP连接信息
udp_connections = psutil.net_connections(kind='udp')
for conn in udp_connections:
    print(f"协议: {conn.type}")
    print(f"本地地址: {conn.laddr}")
    print(f"远程地址: {conn.raddr}")
    print(f"状态: {conn.status}")
    print(f"进程ID: {conn.pid}")
    print()

net_connections()方法也可以获取系统中所有的UDP连接信息。

网络流量统计

psutil提供了多种方法来获取网络流量的统计信息,包括发送和接收的字节数、数据包数等。

获取网络流量统计信息

# 获取网络流量统计信息
net_io_counters = psutil.net_io_counters()
print(f"发送字节数: {net_io_counters.bytes_sent / 1024 / 1024:.2f} MB")
print(f"接收字节数: {net_io_counters.bytes_recv / 1024 / 1024:.2f} MB")
print(f"发送数据包数: {net_io_counters.packets_sent}")
print(f"接收数据包数: {net_io_counters.packets_recv}")

net_io_counters()方法可以获取系统中所有网络接口的流量统计信息,包括发送和接收的字节数、数据包数等。

获取进程信息

列出所有进程

psutil提供了多种方法来列出系统中所有的进程。

列出所有进程ID

# 列出所有进程ID
pids = psutil.pids()
for pid in pids:
    print(f"进程ID: {pid}")

pids()方法可以获取系统中所有进程的ID。

列出所有进程对象

# 列出所有进程对象
processes = psutil.process_iter()
for proc in processes:
    print(f"进程ID: {proc.pid}")
    print(f"进程名称: {proc.name()}")
    print(f"进程状态: {proc.status()}")
    print()

process_iter()方法可以获取系统中所有进程的对象,通过进程对象可以获取更多的进程信息。

获取进程详细信息

psutil提供了多种方法来获取进程的详细信息,包括进程名称、状态、CPU使用率、内存使用率等。

获取进程名称

# 获取进程名称
proc = psutil.Process(pid=1)
print(f"进程名称: {proc.name()}")

Process()方法可以获取指定进程ID的进程对象,通过进程对象的name()方法可以获取进程名称。

获取进程状态

# 获取进程状态
proc = psutil.Process(pid=1)
print(f"进程状态: {proc.status()}")

status()方法可以获取进程的状态,包括运行中、睡眠中、停止等。

获取进程CPU使用率

# 获取进程CPU使用率
proc = psutil.Process(pid=1)
cpu_usage = proc.cpu_percent(interval=1)
print(f"进程CPU使用率: {cpu_usage}%")

cpu_percent()方法可以获取进程的CPU使用率。

获取进程内存使用率

# 获取进程内存使用率
proc = psutil.Process(pid=1)
mem_info = proc.memory_info()
print(f"进程内存使用量: {mem_info.rss / 1024 / 1024:.2f} MB")

memory_info()方法可以获取进程的内存使用量,rss表示常驻内存集大小。

进程管理

psutil还提供了进程管理的功能,包括终止进程、挂起进程、恢复进程等。

终止进程

# 终止进程
proc = psutil.Process(pid=1)
proc.terminate()

terminate()方法可以终止指定进程。

挂起进程

# 挂起进程
proc = psutil.Process(pid=1)
proc.suspend()

suspend()方法可以挂起指定进程。

恢复进程

# 恢复进程
proc = psutil.Process(pid=1)
proc.resume()

resume()方法可以恢复指定进程。

高级用法

定时监控

psutil可以结合Python的定时任务库(如timeschedule等)来实现定时监控系统的硬件、网络和进程信息。

定时监控CPU使用率

import time
import psutil

def monitor_cpu():
    cpu_usage = psutil.cpu_percent(interval=1)
    print(f"CPU使用率: {cpu_usage}%")

while True:
    monitor_cpu()
    time.sleep(5)

上述代码每隔5秒监控一次CPU的使用率。

跨平台兼容性

psutil是一个跨平台的库,可以在多种操作系统上使用。在使用时需要注意不同操作系统之间的差异。

检查操作系统

import psutil

if psutil.LINUX:
    print("当前系统是Linux")
elif psutil.WINDOWS:
    print("当前系统是Windows")
elif psutil.MACOS:
    print("当前系统是macOS")

psutil提供了LINUXWINDOWSMACOS等常量来判断当前操作系统。

性能优化

在使用psutil时,如果频繁获取系统信息,可能会影响系统性能。可以通过以下方法进行优化:

使用缓存机制

import psutil
import time

# 缓存CPU使用率
cpu_usage_cache = None

def get_cpu_usage():
    global cpu_usage_cache
    if cpu_usage_cache is None:
        cpu_usage_cache = psutil.cpu_percent(interval=1)
    return cpu_usage_cache

while True:
    print(f"CPU使用率: {get_cpu_usage()}%")
    time.sleep(5)

上述代码通过缓存机制减少了获取CPU使用率的次数。

实际应用案例

系统监控工具

psutil可以用来开发系统监控工具,实时监控系统的硬件、网络和进程信息。

系统监控工具示例

import psutil
import time

def monitor_system():
    # 监控CPU使用率
    cpu_usage = psutil.cpu_percent(interval=1)
    print(f"CPU使用率: {cpu_usage}%")

    # 监控内存使用率
    mem_info = psutil.virtual_memory()
    print(f"内存使用率: {mem_info.percent}%")

    # 监控磁盘使用率
    disk_usage = psutil.disk_usage('/')
    print(f"磁盘使用率: {disk_usage.percent}%")

    # 监控网络流量
    net_io = psutil.net_io_counters()
    print(f"发送字节数: {net_io.bytes_sent / 1024 / 1024:.2f} MB")
    print(f"接收字节数: {net_io.bytes_recv / 1024 / 1024:.2f} MB")

while True:
    monitor_system()
    time.sleep(5)

上述代码实现了一个简单的系统监控工具,每隔5秒监控一次系统的CPU、内存、磁盘和网络信息。

网络流量分析

psutil可以用来分析网络流量,帮助识别网络瓶颈和异常流量。

网络流量分析示例

”`python import psutil import time

def monitor_network(): net_io = psutil.net_io_counters() print(f”发送字节数: {net_io.bytes_sent / 1024 / 1024:.2f} MB”) print(f”接收字节数: {net_io.bytes_recv / 1024 / 1024:.2f} MB”)

while True:

推荐阅读:
  1. 如何在Python中使用psutil函数获取进程信息
  2. python中psutil监控进程的示例分析

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python psutil

上一篇:如何使用C语言实现学生管理系统

下一篇:Android Jetpack库之ViewModel组件怎么使用

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》