python模块之psutil

一、psutil模块

1、介绍

psutil是一个跨平台库(http://pythonhosted.org/psutil/)能够轻松实现获取系统运行的进程和系统利用率(包括CPU、内存、磁盘、网络等)信息。它主要用来做系统监控,性能分析,进程管理。它实现了同等命令行工具提供的功能,如ps、top、lsof、netstat、ifconfig、who、df、kill、free、nice、ionice、iostat、iotop、uptime、pidof、tty、taskset、pmap等。目前支持32位和64位的Linux、Windows、OS X、FreeBSD和Sun Solaris等操作系统.

2、安装psutil模块

CentOS安装psutil包:
python版本:3.5
wget https://pypi.python.org/packages/source/p/psutil/psutil-3.2.1.tar.gz --no-check-certificate
tar zxvf psutil-3.2..tar.gz
cd psutil-3.2.
python setup.py install Windos安装psutil包:
D:\python35\Scripts>pip3.exe install psutil
Collecting psutil
Downloading psutil-5.3.-cp35-cp35m-win_amd64.whl (215kB)
% |████████████████████████████████| 225kB 84kB/s
Installing collected packages: psutil
Successfully installed psutil-5.3.

二、.获取系统基本信息的使用

1、CPU信息

使用cpu_times方法获取cpu的完整信息,如下所示。
>>> psutil.cpu_times()
scputimes(user=650613.02, nice=22.14, system=154916.5, idle=16702285.26, iowait=68894.55, irq=3.38, softirq=7075.65, steal=0.0, guest=0.0)
>>> 获取单个数据,如用户的cpu时间或io等待时间,如下所示:
>>> psutil.cpu_times().user
650617.11
>>> psutil.cpu_times().iowait
68894.63
>>> 获取cpu逻辑和物理个数,默认logical值为True 。
#CPU逻辑个数
>>> psutil.cpu_count() #CPU物理个数
>>> psutil.cpu_count(logical=False) >>> 获取cpu的使用率:
>>> psutil.cpu_percent()
2.5
>>> psutil.cpu_percent()
2.5
>>>

2、内存信息

内存信息的获取主要使用virtual_memory方法。swap就是使用swap_memory方法。
>>> mem = psutil.virtual_memory()
>>> mem
svmem(total=, available=, percent=73.5, used=, free=, active=, inactive=, buffers=, cached=)
>>> mem.total >>> mem.used >>> mem.free >>> print(mem.total//)
3832.4375
>>>
其中percent表示实际已经使用的内存占比,即(-)/*% 。available表示还可以使用的内存。

3、磁盘信息

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

如下先获取分区信息,然后看下根分区的使用情况:
>>> psutil.disk_partitions()
[sdiskpart(device='/dev/mapper/root', mountpoint='/', fstype='ext4', opts='rw,errors=remount-ro'), sdiskpart(device='/dev/sda1', mountpoint='/boot', fstype='ext2', opts='rw')]
>>> psutil.disk_usage('/')
sdiskusage(total=, used=, free=, percent=40.8)
>>> 默认disk_io_counters方法获取的是硬盘总的io数和读写信息,如果需要获取单个分区的io和读写信息加上"perdisk=True"参数。
>>> psutil.disk_io_counters()
sdiskio(read_count=, write_count=, read_bytes=, write_bytes=, read_time=, write_time=)
>>> psutil.disk_io_counters(perdisk=True)
{'vdb1': sdiskio(read_count=, write_count=, read_bytes=, write_bytes=, read_time=, write_time=), 'vda1': sdiskio(read_count=, write_count=, read_bytes=, write_bytes=, read_time=, write_time=)}
>>>

4、网络信息

网络io和磁盘io使用方法差不多,主要使用net_io_counters方法,如果需要获取单个网卡的io信息,加上pernic=True参数。
#获取网络总的io情况
>>>
>>> psutil.net_io_counters()
snetio(bytes_sent=, bytes_recv=, packets_sent=, packets_recv=, errin=, errout=, dropin=, dropout=)
#获取网卡的io情况
>>>
>>> psutil.net_io_counters(pernic=True)
{'lo': snetio(bytes_sent=, bytes_recv=, packets_sent=, packets_recv=, errin=, errout=, dropin=, dropout=), 'eth0': snetio(bytes_sent=, bytes_recv=, packets_sent=, packets_recv=, errin=, errout=, dropin=, dropout=)}

5、其他系统信息

5.1、获取开机时间

#以linux时间格式返回,可以使用时间戳转换
>>> psutil.boot_time()
1496647567.0 #转换成自然时间格式
>>> psutil.boot_time()
1496647567.0
>>> datetime.datetime.fromtimestamp(psutil.boot_time ()).strftime("%Y-%m-%d %H: %M: %S")
'2017-06-05 15: 26: 07'
>>>

5.2、查看系统全部进程

>>> psutil.pids()
[, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ]

5.3、查看单个进程

p = psutil.Process()
p.name() #进程名
p.exe() #进程的bin路径
p.cwd() #进程的工作目录绝对路径
p.status() #进程状态
p.create_time() #进程创建时间
p.uids() #进程uid信息
p.gids() #进程的gid信息
p.cpu_times() #进程的cpu时间信息,包括user,system两个cpu信息
p.cpu_affinity() #get进程cpu亲和度,如果要设置cpu亲和度,将cpu号作为参考就好
p.memory_percent() #进程内存利用率
p.memory_info() #进程内存rss,vms信息
p.io_counters() #进程的IO信息,包括读写IO数字及参数
p.connectios() #返回进程列表
p.num_threads() #进程开启的线程数
听过psutil的Popen方法启动应用程序,可以跟踪程序的相关信息
from subprocess import PIPE
p = psutil.Popen(["/usr/bin/python", "-c", "print('hello')"],stdout=PIPE)
p.name()
p.username()

6、例子

查看系统硬件

#!/usr/bin/env python
#coding:utf- import psutil
import datetime
import time # 当前时间
now_time = time.strftime('%Y-%m-%d-%H:%M:%S', time.localtime(time.time()))
print(now_time) # 查看cpu物理个数的信息
print(u"物理CPU个数: %s" % psutil.cpu_count(logical=False)) #CPU的使用率
cpu = (str(psutil.cpu_percent())) + '%'
print(u"cup使用率: %s" % cpu) #查看内存信息,剩余内存.free 总共.total
#round()函数方法为返回浮点数x的四舍五入值。 free = str(round(psutil.virtual_memory().free / (1024.0 * 1024.0 * 1024.0), ))
total = str(round(psutil.virtual_memory().total / (1024.0 * 1024.0 * 1024.0), ))
memory = int(psutil.virtual_memory().total - psutil.virtual_memory().free) / float(psutil.virtual_memory().total)
print(u"物理内存: %s G" % total)
print(u"剩余物理内存: %s G" % free)
print(u"物理内存使用率: %s %%" % int(memory * ))
# 系统启动时间
print(u"系统启动时间: %s" % datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d %H:%M:%S")) # 系统用户
users_count = len(psutil.users())
#
# >>> for u in psutil.users():
# ... print(u)
# ...
# suser(name='root', terminal='pts/0', host='61.135.18.162', started=1505483904.0)
# suser(name='root', terminal='pts/5', host='61.135.18.162', started=1505469056.0)
# >>> u.name
# 'root'
# >>> u.terminal
# 'pts/5'
# >>> u.host
# '61.135.18.162'
# >>> u.started
# 1505469056.0
# >>> users_list = ",".join([u.name for u in psutil.users()])
print(u"当前有%s个用户,分别是 %s" % (users_count, users_list)) #网卡,可以得到网卡属性,连接数,当前流量等信息
net = psutil.net_io_counters()
bytes_sent = '{0:.2f} Mb'.format(net.bytes_recv / / )
bytes_rcvd = '{0:.2f} Mb'.format(net.bytes_sent / / )
print(u"网卡接收流量 %s 网卡发送流量 %s" % (bytes_rcvd, bytes_sent)) io = psutil.disk_partitions()
# print(io)
# print("io[-1]为",io[-])
#del io[-] print('-----------------------------磁盘信息---------------------------------------') print("系统磁盘信息:" + str(io)) for i in io:
o = psutil.disk_usage(i.device)
print("总容量:" + str(int(o.total / (1024.0 * 1024.0 * 1024.0))) + "G")
print("已用容量:" + str(int(o.used / (1024.0 * 1024.0 * 1024.0))) + "G")
print("可用容量:" + str(int(o.free / (1024.0 * 1024.0 * 1024.0))) + "G") print('-----------------------------进程信息-------------------------------------')
# 查看系统全部进程
for pnum in psutil.pids():
p = psutil.Process(pnum)
print(u"进程名 %-20s 内存利用率 %-18s 进程状态 %-10s 创建时间 %-10s " \
% (p.name(), p.memory_percent(), p.status(), p.create_time()))

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

psutil模块的更多相关文章

  1. 15.python笔记之psutil模块

    一.psutil模块 1. psutil是一个跨平台库(http://code.google.com/p/psutil/),能够轻松实现获取系统运行的进程和系统利用率(包括CPU.内存.磁盘.网络等) ...

  2. psutil模块安装指南(win与linux)

    1.windows下psutil模块安装: https://pypi.python.org/packages/3.4/p/psutil/ 下载符合版本的软件包下载,然后安装即可. 2.ubuntu下载 ...

  3. CentOS7--64安装python的psutil模块

    1.以root身份登陆CentOS依次 执行以下命令: wget https://pypi.python.org/packages/source/p/psutil/psutil-2.1.3.tar.g ...

  4. Python 中psutil 模块的安装

    第一步下载psutil 的安装包 网址:https://pypi.python.org 第二步解压 .tar.gz cd psutil- 第三步安装: python setup.py build py ...

  5. 自动化之路 python psutil模块 收集硬件信息

    一.psutil模块 1. psutil是一个跨平台库,能够轻松实现获取系统运行的进程和系统利用率(包括CPU.内存.磁盘.网络等)信息.它主要应用于系统监控,分析和限制系统资源及进程的管理.它实现了 ...

  6. [Python Study Notes]psutil模块

    系统性能信息模块psutil psutil是一个跨平台库,能够轻松实现获取系统运行的进程和系统利用率(CPU,内存,磁盘,网络等)信息,主要应用于系统监控,分析和限制系统资源及进程的管理,它实现了同等 ...

  7. python之psutil模块(获取系统性能数据)

    psutil模块 1.介绍 psutil是一个跨平台库(http://code.google.com/p/psutil/),能够轻松实现获取系统运行的进程和系统利用率(包括CPU.内存.磁盘.网络等) ...

  8. python之psutil模块(获取系统性能信息(CPU,内存,磁盘,网络)

    一.psutil模块 1. psutil是一个跨平台库(http://code.google.com/p/psutil/),能够轻松实现获取系统运行的进程和系统利用率(包括CPU.内存.磁盘.网络等) ...

  9. python笔记之psutil模块

    收集教程 http://www.cnblogs.com/xiao1/p/6164204.html 实战教程 安装psutil模块 pip2 install psutil 实战代码 #encoding= ...

随机推荐

  1. 峰Redis学习(3)Redis 数据结构(字符串、哈希)

    第一节:Redis 数据类型介绍 五种数据类型: 字符串(String) 字符串列表(list) 有序字符串集合(sorted set) 哈希(hash) 字符串集合(set)   第二节:Redis ...

  2. namenode namespaceID与datanode namespaceID 不一致导致datanode无法启动的问题

    在启动hadoop之后,发现如下 datanode何在????? 在重新启动hadoop的时候,发现了问题,如下 这说明datanode启动时出错了 我们跟踪这个问题,进入到log文件夹下,找到had ...

  3. arcgis for android 读取shp文件中文乱码解决方法

    设置注册表默认字符,即可解决中文乱码问题. 'dbfDefault' 设置方法1.开始--运行,输入”Regedit“,打开注册表.2.如是用的是 10.x 版本 ArcGIS Desktop,定位到 ...

  4. 在html中用js代替${pagecontext.request.getcontextpath}这样就不用使用jsp了

    var pathArray = window.location.pathname.split('/');  var secondLevelLocation = pathArray[1];  var l ...

  5. 这些git命令判断提交到哪个分支哪个项目上

    git branch -r fuweikun@pengfei:~/e1_cp/AMSS$ git branch* 8939-E1-2104026-dev git config -l fuweikun@ ...

  6. 干货 | 100+个NLP数据集大放送,再不愁数据!

    奉上100多个按字母顺序排列的开源自然语言处理文本数据集列表(原始未结构化的文本数据),快去按图索骥下载数据自己研究吧! 数据集 Apache软件基金会公开邮件档案:截止到2011年7月11日全部公开 ...

  7. 集群中使用chronyc同步时间

    在集群之中,有些服务器之间的时间需要同步,但并不是所有机器可以直接连外网,这时可以用Chrony工具解决. 解决方法是将其中一台设为时间服务器,然后其它服务器和这台时间服务器同步即可.具体步骤如下: ...

  8. flask框架get post方式

    设置路由的访问方式get post常用的两种 # -*- coding: utf-8 -*- # Flask hello world from flask import Flask, redirect ...

  9. Android CoordinatorLayout实现多列表切换并和头布局联动;

    注意:不是双列表联动,是多列表和头布局联动: 大概就是和饿了么店铺首页类似的布局框架吧,头布局显示时,列表RecyclerView或ScrollView和头布局一起滚动,头布局完全隐藏后列表再去滚动, ...

  10. Oracle Service Bus (OSB) 12c 的配置安装

    Oracle Service Bus (OSB) 12c 的配置安装 1.OSB配置环境: Oracle Database Oracle Fusion Middleware Infrastructur ...