资料来源:https://www.liaoxuefeng.com/wiki/1016959663602400/1183565811281984
http://www.gxlcms.com/python-362447.html
获取CPU信息
print(psutil.cpu_count()) # CPU逻辑数量
print(psutil.cpu_count(logical=False)) # CPU物理核心,2说明是双核超线程, 4则是4核非超线程,获取CPU的物理个数
print(psutil.cpu_times()) # 统计CPU的用户/系统/空闲时间
psutil.cpu_times().user # 获取单项数据,例如用户user的CPU时间比
psutil.cpu_stats()
psutil.cpu_freq(percpu=False)
实现类似top命令的CPU使用率,每秒刷新一次,累计10次
for x in range(10): # 实现类似top命令的CPU使用率,每秒刷新一次,累计10次
print(psutil.cpu_percent(interval=1, percpu=True))
"""
输出:
[6.1, 4.7, 7.8, 3.1]
[9.1, 3.1, 3.1, 1.6]
[0.0, 3.1, 3.1, 6.2]
[0.0, 6.3, 1.6, 3.1]
[7.6, 7.8, 6.2, 9.4]
[27.9, 23.1, 27.7, 21.5]
[6.1, 1.6, 4.7, 6.2]
[20.0, 15.6, 20.0, 21.9]
[7.7, 9.4, 9.4, 9.4]
[7.6, 1.6, 6.3, 4.7]
"""
获取内存信息
使用psutil获取物理内存和交换内存信息,分别使用:
print(psutil.virtual_memory()) # 获取物理内存
print(psutil.swap_memory()) # 获取交换内存
psutil.virtual_memory().total # 总内存
psutil.virtual_memory().used # 已使用内存
psutil.virtual_memory().free # 获取空闲内存数
"""
输出:
svmem(
total=8589934592, available=2866520064,
percent=66.6, used=7201386496, free=216178688,
active=3342192640, inactive=2650341376,
wired=1208852480
)
sswap(
total=1073741824, used=150732800,
free=923009024, percent=14.0,
sin=10705981440, sout=40353792
)
"""
- 返回的是字节为单位的整数,可以看到,总内存大小是8589934592 = 8 GB,已用7201386496 = 6.7 GB,使用了66.6%。
- 而交换区大小是1073741824 = 1 GB。
获取磁盘信息
- 可以通过psutil获取磁盘分区、磁盘使用率和磁盘IO信息:
print(psutil.disk_partitions()) # 磁盘分区信息
print(psutil.disk_usage('/')) # 磁盘使用情况,里面参数为所在磁盘分区
psutil.disk_usage('C:/')
print(psutil.disk_io_counters()) # 获取硬盘总的IO个数
psutil.disk_io_counters(perdisk=True) # 获取单个分区的IO个数
"""
输出:
[
sdiskpart(device='/dev/disk1',
mountpoint='/', fstype='hfs',
opts='rw,local,rootfs,dovolfs,
journaled,multilabel')
]
sdiskusage(
total=998982549504, used=390880133120,
free=607840272384, percent=39.1
)
sdiskio(
read_count=988513, write_count=274457,
read_bytes=14856830464, write_bytes=17509420032,
read_time=2228966, write_time=1618405
)
"""
- 可以看到,磁盘’/'的总容量是998982549504 = 930 GB,使用了39.1%。文件格式是HFS,opts中包含rw表示可读写,journaled表示支持日志。
获取网络信息
psutil可以获取网络接口和网络连接信息:
print(psutil.net_io_counters()) # 获取网络读写字节/包的个数
psutil.net_io_counters(pernic=True) # 输出单个网络接口的IO信息
print(psutil.net_if_addrs()) # 获取网络接口信息
print(psutil.net_if_stats()) # 获取网络接口状态
print(psutil.net_connections()) # 获取当前网络连接信息
psutil.net_connections(kind='inet')
psutil.net_if_addrs()
psutil.net_if_stats()
你可能会得到一个AccessDenied错误,原因是psutil获取信息也是要走系统接口,而获取网络连接信息需要root权限,这种情况下,可以退出Python交互环境,用sudo重新启动
获取进程信息
print(psutil.pids()) # 所有进程ID
p = psutil.Process(420) # 获取指定进程ID=3776,其实就是当前Python交互环境
print(p.name()) # 进程名称
print(p.exe()) # 进程exe路径
print(p.cwd()) # 进程工作目录
print(p.cmdline()) # 进程启动的命令行
print(p.ppid()) # 父进程ID
print(p.parent()) # 父进程
print(p.children()) # 子进程列表
print(p.status()) # 进程状态
print(p.username()) # 进程用户名
print(p.create_time()) # 进程创建时间
# print(p.terminal()) # 进程终端
print(p.cpu_times()) # 进程使用的CPU时间
print(p.memory_info()) # 进程使用的内存
print(p.open_files()) # 进程打开的文件
print(p.connections()) # 进程相关网络连接
print(p.num_threads()) # 进程的线程数量,进程开启的线程数
print(p.threads()) # 所有线程信息
print(p.environ()) # 进程环境变量
# p.terminate() # 结束进程
p.uids() # 进程uid信息
p.gids() # 进程gid信息
p.cpu_affinity() # get进程的亲和度
p.memory_percent() # 进程内存使用率
模拟出ps命令
psutil.test()
"""
USER PID %MEM VSZ RSS TTY START TIME COMMAND
root 0 24.0 74270628 2016380 ? Nov18 40:51 kernel_task
root 1 0.1 2494140 9484 ? Nov18 01:39 launchd
root 44 0.4 2519872 36404 ? Nov18 02:02 UserEventAgent
root 45 ? 2474032 1516 ? Nov18 00:14 syslogd
root 47 0.1 2504768 8912 ? Nov18 00:03 kextd
root 48 0.1 2505544 4720 ? Nov18 00:19 fseventsd
_appleeven 52 0.1 2499748 5024 ? Nov18 00:00 appleeventsd
root 53 0.1 2500592 6132 ? Nov18 00:02 configd
"""
传感器
print psutil.sensors_temperatures(fahrenheit=False)
print psutil.sensors_fans()
print psutil.sensors_battery()
其他
print psutil.boot_time()/1000/60/60 # 获取开机时间,以Linux时间戳格式返回
# 如果想要转换成自然时间格式
datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d %H:%M:%S")
print psutil.users() # 返回当前登录系统的用户信息