Python psutil模块

资料来源: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() # 返回当前登录系统的用户信息
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值