简介
psutil (process and system utilities) 是一个跨平台库,用于检索关于Python中运行进程和系统利用率(CPU、内存、磁盘、网络、传感器)的信息。
它主要用于系统监视、分析和限制进程资源以及管理正在运行的进程。
它实现了经典UNIX命令行工具(如ps、top、iotop、lsof、netstat、ifconfig、free等)提供的许多功能。
支持Python 2.6, 2.7 和 3.4+
当前支持系统有:
- Linux
- Windows
- macOS
- FreeBSD, OpenBSD, NetBSD
- Sun Solaris
- AIX
安装
Linux下安装需要root权限
扫描二维码关注公众号,回复:
11402953 查看本文章
![](/qrcode.jpg)
pip install psutil
CPU
import psutil
print(psutil.cpu_times()) # CPU时间
for x in range(3):
print(psutil.cpu_percent(interval=1)) # CPU利用率,间隔1s
for x in range(3):
print(psutil.cpu_percent(interval=1, percpu=True)) # 每个CPU的利用率
for x in range(3):
print(psutil.cpu_times_percent(interval=1, percpu=False)) # 同cpu_percent(),并给出CPU时间
print(psutil.cpu_count()) # 逻辑CPU数量
print(psutil.cpu_count(logical=False)) # 物理CPU数量
print(psutil.cpu_stats()) # CPU状态:上下文切换次数、中断数、软件中断数、系统调用数
print(psutil.cpu_freq()) # CPU频率
print(psutil.getloadavg()) # 平均系统负载(最近1/5/15分钟)
内存
import psutil
print(psutil.virtual_memory()) # 内存情况
print(psutil.swap_memory()) # 交换内存情况
磁盘
import psutil
print(psutil.disk_partitions()) # 已挂载的磁盘分区,类似UNIX的df命令
print(psutil.disk_usage('C:/')) # 给定路径分区的磁盘情况
print(psutil.disk_io_counters(perdisk=False)) # 磁盘I/O情况
网络
需要root权限
import psutil
print(psutil.net_io_counters(pernic=True)) # 网络I/O情况
print(psutil.net_connections()) # 套接字连接
print(psutil.net_if_addrs()) # 网络接口,网卡关联地址
print(psutil.net_if_stats()) # 网卡信息
传感器
仅Linux和FreeBSD可用
import psutil
print(psutil.sensors_temperatures()) # 硬件温度
print(psutil.sensors_fans()) # 硬件风扇速度
print(psutil.sensors_battery()) # 电池状态
其他系统信息
import psutil
print(psutil.boot_time()) # 系统启动时间
print(psutil.users()) # 当前连接在系统上的用户
进程
import psutil
import random
print(psutil.pids()) # 当前运行的pid排序列表
p = random.choice(psutil.pids()) # 随机挑一个进程出来
p = psutil.Process(p)
print(p)
print(p.name()) # 进程名
print(p.exe()) # 进程完整路径
print(p.cwd()) # 进程所在路径
print(p.cmdline()) # 进程命令
print(p.pid) # 进程ID
print(p.ppid()) # 父进程ID
print(p.children(recursive=True)) # 递归查看子进程
print(p.parent()) # 父进程(对象形式)
print(p.parents()) # 父进程(列表形式)
print(p.status()) # 运行状态
print(p.username()) # 用户名
print(p.create_time()) # 创建时间
# print(p.terminal()) # 进程的终端
# print(p.uids()) # 用户ID
# print(p.gids()) # 用户组ID
print(p.cpu_times()) # 累计进程时间
print(p.cpu_percent(interval=1.0)) # CPU利用率
print(p.cpu_affinity()) # 关联的CPU
# print(p.cpu_affinity([0, 1])) # 设置关联的CPU
# print(p.cpu_num()) # 进程运行的CPU
print(p.memory_info()) # 进程的内存信息
print(p.memory_full_info()) # 进程的完整内存信息
print(p.memory_percent()) # 内存利用率
print(p.memory_maps()) # 进程映射的内存区域
print(p.io_counters()) # IO统计信息
print(p.open_files()) # 打开的文件
print(p.connections()) # 套接字连接
print(p.num_threads()) # 使用的线程数
# print(p.num_fds()) # 打开的文件描述符数量
print(p.threads()) # 进程打开的线程
print(p.num_ctx_switches()) # 进程的上下文切换数量
print(p.nice()) # 进程优先级
# print(p.nice(10)) # 设置进程优先级
print(p.ionice()) # IO优先级
# print(p.ionice(psutil.IOPRIO_CLASS_IDLE)) # 设置IO优先级
# print(p.rlimit(psutil.RLIMIT_NOFILE, (5, 5))) # 设置资源限制
# print(p.rlimit(psutil.RLIMIT_NOFILE)) # 设置资源限制
print(p.environ()) # 进程的环境变量
print(p.as_dict()) # 字典形式的进程信息
print(p.is_running()) # 进程是否正在运行
# print(p.suspend()) # 用SIGSTOP预先检查PID是否被重用来暂停进程。在Windows上将挂起所有进程线程
# print(p.resume()) # 用SIGSTOP预先检查PID是否被重用来恢复进程。在Windows上将恢复所有进程线程
# print(p.terminate()) # 用SIGTERM预先检查PID是否被重用来终止进程。在Windows上相当于kill
# print(p.kill()) # 用SIGTERM预先检查PID是否被重用来杀死当前进程
# print(p.wait(timeout=3)) # 等待进程终止
更多进程API
import psutil
for proc in psutil.process_iter(['pid', 'name']): # 生成器
print(proc.info)
print(psutil.pid_exists(3)) # 进程ID为3是否存在
Windows服务
import psutil
print(list(psutil.win_service_iter())) # 所有Windows服务
s = psutil.win_service_get('alg') # 某个服务
print(s.as_dict())