1. 首页
  2. 运维开发
  3. Python

Python获取系统基础信息psutil模块使用

通常linux系统的基础信息如内存、cpu等这些都是通过shell来获取。不过python的psutil模块把shell查看系统基础信息的功能都包装了下,使用更加简单,功能丰富。

psutil安装

地址:https://pypi.python.org/pypi?:action=display&name=psutil

下载源码后安装

wget https://pypi.python.org/packages/source/p/psutil/psutil-3.2.1.tar.gz --no-check-certificate
tar zxvf psutil-3.2.1.tar.gz 
cd psutil-3.2.1
sudo python setup.py install

获取系统基本信息的使用

CPU信息

linux系统中的cpu主要有几个部分组成,可以参考之前《Linux系统查看CPU使用率的几个命令》这篇文章。

使用cpu_times方法获取cpu的完整信息,如下所示。

>>> psutil.cpu_times()
scputimes(user=406604.31, nice=9686.8199999999997, system=664003.88, idle=19646386.609999999, iowait=715788.23999999999, irq=165388.04000000001, softirq=47710.230000000003, steal=0.0, guest=0.0)

获取单个数据,如用户的cpu时间

>>> psutil.cpu_times().user
406604.59999999998

获取cpu物理和逻辑个数,默认logical值为True 。

>>> psutil.cpu_count()
4
>>> psutil.cpu_count(logical=False)
2

内存信息

内存信息的获取主要使用virtual_memory方法。swap使用就用swap_memory方法。

>>> mem=psutil.virtual_memory()
>>> mem
svmem(total=1047543808L, available=717537280L, percent=31.5, used=1018589184L, free=28954624L, active=441827328, inactive=449007616, buffers=218214400L, cached=470368256)
>>> mem.total
1047543808L
>>> print (mem.total/8/1024)
127874
>>> print (mem.total/1024/1024) 
999

其中percent表示实际已经使用的内存占比,即(1047543808-717537280)/1047543808*100% 。available表示还可以使用的内存。

磁盘信息

磁盘信息主要有两部分,一个是磁盘的利用率,一个是io,他们分别可以通过disk_usage和disk_io_counters方法获取。

如下先获取分区信息,然后看下根分区的使用情况。

>>> psutil.disk_partitions()
[sdiskpart(device='/dev/mapper/zhang-root', mountpoint='/', fstype='ext4', opts='rw,errors=remount-ro'), sdiskpart(device='/dev/sda1', mountpoint='/boot', fstype='ext2', opts='rw')]
>>> psutil.disk_usage('/') 
sdiskusage(total=43785617408, used=15221456896, free=26339921920, percent=34.799999999999997)
>>>

默认disk_io_counters方法获取的是硬盘总的io数和读写信息,如果需要获取单个分区的io和读写信息加上”perdisk=True”参数。

>>> psutil.disk_io_counters()
sdiskio(read_count=11722336, write_count=136652693, read_bytes=263345571840, write_bytes=848806625280, read_time=66298670, write_time=2741668730)
>>> psutil.disk_io_counters(perdisk=True)
{'dm-1': sdiskio(read_count=71443, write_count=102745, read_bytes=292630528, write_bytes=420843520, read_time=684480, write_time=44471270), 'sda5': sdiskio(read_count=5305289, write_count=29095024, read_bytes=131662169088, write_bytes=424404525056, read_time=28226110, write_time=641655840), 'sda2': sdiskio(read_count=2, write_count=0, read_bytes=2048, write_bytes=0, read_time=30, write_time=0), 'dm-0': sdiskio(read_count=6343081, write_count=107455225, read_bytes=131369276416, write_bytes=423983681536, read_time=37361670, write_time=2055542540), 'sda1': sdiskio(read_count=2521, write_count=166, read_bytes=21493760, write_bytes=172032, read_time=26380, write_time=1810)}
>>>

网络信息

网络io和磁盘io使用方法差不多,主要使用net_io_counters方法,如果需要获取单个网卡的io信息,加上pernic=True参数。

>>> psutil.net_io_counters()
snetio(bytes_sent=470306251621, bytes_recv=504672135942, packets_sent=1231438305, packets_recv=1243021636, errin=0, errout=0, dropin=0, dropout=0)
>>> psutil.net_io_counters(pernic=True)
{'lo': snetio(bytes_sent=53311613686, bytes_recv=53311613686, packets_sent=121127899, packets_recv=121127899, errin=0, errout=0, dropin=0, dropout=0), 'eth1': snetio(bytes_sent=209756860205, bytes_recv=193733233062, packets_sent=356636797, packets_recv=391137413, errin=0, errout=0, dropin=0, dropout=0), 'eth0': snetio(bytes_sent=207237886306, bytes_recv=257627387945, packets_sent=753674621, packets_recv=730757206, errin=0, errout=0, dropin=0, dropout=0)}
>>>

以上是psutil模块获取linux系统基础信息的几个方法,大概常用的数据就这些。当然其他用法还有很多,详情可以参考他的官方文档。

网址:http://pythonhosted.org/psutil/

 

联系我们

0574-55011290

QQ:248687950

邮件:admin@nbhao.org

工作时间:周一至周五,9:00-18:00,节假日休息

QR code