Python中psutil的介绍与用法


Posted in Python onMay 02, 2019

psutil简介

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等操作系统.

如果安装了Anaconda,psutil就可以使用,当然也可使用pip安装,使用前先要导包:

import psutil

主要方法简介

psutil.disk_partitions()返回是一个磁盘分区信息,包括(device, mountpoint, fstype, opts);

psutil.disk_usage()返回磁盘使用情况:

disk = psutil.disk_partitions()
for i in disk:
 print("磁盘:%s 分区格式:%s" % (i.device, i.fstype)) # 盘符 分区格式
 disk_use = psutil.disk_usage(i.device) 

 print("使用了:%.1f GB,空闲:%.1f GB,总共:%.1f GB,使用率%.1f%%," % (
 disk_use.used / 1024 / 1024 / 1024, disk_use.free / 1024 / 1024 / 1024, disk_use.total / 1024 / 1024 / 1024,
 disk_use.percent))

磁盘:C:\   分区格式:NTFS
使用了:34.8 GB,空闲:48.2GB,总共:83.0 GB,使用率41.9%,
磁盘:D:\   分区格式:NTFS
使用了:110.5 GB,空闲:89.2GB,总共:199.7 GB,使用率55.4%,
磁盘:E:\   分区格式:NTFS
使用了:100.1 GB,空闲:95.2GB,总共:195.3 GB,使用率51.3%,
磁盘:F:\   分区格式:NTFS
使用了:120.6 GB,空闲:64.4GB,总共:184.9 GB,使用率65.2%, 

psutil.cpu_percent() cpu的利用率

psutil.virtual_memory()内存情况

memory = psutil.virtual_memory()
# memory.used 使用的
# memory.total 总共
ab = float(memory.used) / float(memory.total) * 100
print("内存使用率为:%.2f%%" % ab)

psutil.net_io_counters() 网络使用情况,可以监控电脑每一个网口的上传,下载等信息;每个电脑由于网口名字不同,返回的信息不太一样。用下面的代码可以先打印出来你电脑的网口信息:

print(psutil.net_io_counters(pernic=True))

你会得到类型下面的信息:

{'以太网': snetio(bytes_sent=0, bytes_recv=0, packets_sent=0, packets_recv=0, errin=0, errout=0, dropin=0, dropout=0), '本地连接* 2': snetio(bytes_sent=0, bytes_recv=0, packets_sent=0, packets_recv=0, errin=0, errout=0, dropin=0, dropout=0), 'VMware Network Adapter VMnet1': snetio(bytes_sent=597, bytes_recv=13, packets_sent=596, packets_recv=13, errin=0, errout=0, dropin=0, dropout=0), 'VMware Network Adapter VMnet8': snetio(bytes_sent=1919, bytes_recv=13, packets_sent=1919, packets_recv=13, errin=0, errout=0, dropin=0, dropout=0), 'WLAN': snetio(bytes_sent=3993804, bytes_recv=76316885, packets_sent=35011, packets_recv=63467, errin=0, errout=0, dropin=0, dropout=0), '蓝牙网络连接': snetio(bytes_sent=0, bytes_recv=0, packets_sent=0, packets_recv=0, errin=0, errout=0, dropin=0, dropout=0), 'Loopback Pseudo-Interface 1': snetio(bytes_sent=0, bytes_recv=0, packets_sent=0, packets_recv=0, errin=0, errout=0, dropin=0, dropout=0), 'Teredo Tunneling Pseudo-Interface': snetio(bytes_sent=13724, bytes_recv=760, packets_sent=102, packets_recv=5, errin=0, errout=0, dropin=0, dropout=0)}

现在你就可以愉快的监控宽带或WLAN的上传和下载速度了,代码如下:

import psutil
import time

def net_state():
 
 recv1 = psutil.net_io_counters(pernic=True)['WLAN'][1] #接收数据
 send1 = psutil.net_io_counters(pernic=True)['WLAN'][0] #上传数据
 time.sleep(1) # 每隔1s监听端口接收数据
 recv2 = psutil.net_io_counters(pernic=True)['WLAN'][1]
 send2 = psutil.net_io_counters(pernic=True)['WLAN'][0]
 # 上传数据
 return 'upload:%.1f kb/s.' % ((send2 - send1) / 1024.0), 'download:%.1f kb/s.' % ((recv2 - recv1) / 1024.0)

while True:
 s1 = net_state()[0]
 s2 = net_state()[1]
 print('当前上传和下载速度为:')
 print(s1)
 print(s2)
 print('---------------------')

如果你不想每次都运行这脚本,可以使用pyinstaller打包,教程可以参考前面的文章。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
python实现linux服务器批量修改密码并生成execl
Apr 22 Python
Python列表append和+的区别浅析
Feb 02 Python
Python max内置函数详细介绍
Nov 17 Python
关于Python面向对象编程的知识点总结
Feb 14 Python
Python模拟登录之滑块验证码的破解(实例代码)
Nov 18 Python
python、PyTorch图像读取与numpy转换实例
Jan 13 Python
使用Python制作新型冠状病毒实时疫情图
Jan 28 Python
Python编程快速上手——选择性拷贝操作案例分析
Feb 28 Python
Python Tkinter Entry和Text的添加与使用详解
Mar 04 Python
Python selenium键盘鼠标事件实现过程详解
Jul 28 Python
Python基于百度AI实现抓取表情包
Jun 27 Python
python基础之类方法和静态方法
Oct 24 Python
Python3.5字符串常用操作实例详解
May 01 #Python
Python3.5文件修改操作实例分析
May 01 #Python
详解pandas的外部数据导入与常用方法
May 01 #Python
Python3.5文件读与写操作经典实例详解
May 01 #Python
Python3.5集合及其常见运算实例详解
May 01 #Python
Django给admin添加Action的步骤详解
May 01 #Python
Django重置migrations文件的方法步骤
May 01 #Python
You might like
PHP如何实现Unicode和Utf-8编码相互转换
2015/07/29 PHP
YII Framework教程之异常处理详解
2016/03/14 PHP
php实现的数组转xml案例分析
2019/09/28 PHP
Laravel 实现关系模型取出需要的字段
2019/10/10 PHP
详解JavaScript编程中正则表达式的使用
2015/10/25 Javascript
jquery 动态合并单元格的实现方法
2016/08/26 Javascript
jQuery插件FusionCharts实现的MSBar2D图效果示例【附demo源码】
2017/03/24 jQuery
JavaScript判断日期时间差的实例代码
2018/03/01 Javascript
vue axios数据请求及vue中使用axios的方法
2018/09/10 Javascript
ES6的Fetch异步请求的实现方法
2018/12/07 Javascript
es6中比较有用的7个技巧小结
2019/07/12 Javascript
uploadify插件实现多个图片上传并预览
2019/09/30 Javascript
Python中第三方库Requests库的高级用法详解
2017/03/12 Python
Python实现简易过滤删除数字的方法小结
2019/01/09 Python
详解Django中CBV(Class Base Views)模型源码分析
2019/02/25 Python
PyCharm搭建Spark开发环境实现第一个pyspark程序
2019/06/13 Python
python 多进程并行编程 ProcessPoolExecutor的实现
2019/10/11 Python
django 装饰器 检测登录状态操作
2020/07/02 Python
详解基于python的图像Gabor变换及特征提取
2020/10/26 Python
使用CSS3制作响应式导航菜单的方法
2015/07/12 HTML / CSS
将HTML5 Canvas的内容保存为图片借助toDataURL实现
2013/05/20 HTML / CSS
英国轻奢珠宝品牌:Astley Clarke
2016/12/18 全球购物
为什么使用接口?
2014/08/13 面试题
简单的JAVA编程面试题
2013/03/19 面试题
英语专业推荐信
2013/11/16 职场文书
优秀大学生推荐信范文
2013/11/28 职场文书
四好少年事迹材料
2014/01/12 职场文书
运动会800米加油稿
2014/02/22 职场文书
毕业生自荐信如何写
2014/03/24 职场文书
大学理论知识学习自我鉴定
2014/04/28 职场文书
教师工作失职检讨书
2014/09/18 职场文书
2014年组织委员工作总结
2014/12/01 职场文书
体育个人工作总结
2015/02/09 职场文书
2015年司机工作总结
2015/04/23 职场文书
详解OpenCV获取高动态范围(HDR)成像
2022/04/29 Python
Python使用plt.boxplot()函数绘制箱图、常用方法以及含义详解
2022/08/14 Python