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益智游戏计算汉诺塔问题示例
Mar 05 Python
Python开发WebService系列教程之REST,web.py,eurasia,Django
Jun 30 Python
Django中实现一个高性能计数器(Counter)实例
Jul 09 Python
python自动发送邮件脚本
Jun 20 Python
Python爬虫运用正则表达式的方法和优缺点
Aug 25 Python
使用IDLE的Python shell窗口实例详解
Nov 19 Python
Python创建一个元素都为0的列表实例
Nov 28 Python
在 Linux/Mac 下为Python函数添加超时时间的方法
Feb 20 Python
Python中使用threading.Event协调线程的运行详解
May 02 Python
通过Python实现一个简单的html页面
May 16 Python
常用的10个Python实用小技巧
Aug 10 Python
使用Djongo模块在Django中使用MongoDB数据库
Jun 20 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
全国FM电台频率大全 - 18 湖南省
2020/03/11 无线电
约瑟夫环问题的PHP实现 使用PHP数组内部指针操作函数
2010/10/12 PHP
IIS7.X配置PHP运行环境小结
2011/06/09 PHP
PHP扩展程序实现守护进程
2015/04/16 PHP
学习YUI.Ext 第六天--关于树TreePanel(Part 1)
2007/03/10 Javascript
一些实用的jQuery代码片段收集
2011/07/12 Javascript
一个支持任意尺寸的图片上下左右滑动效果
2014/08/24 Javascript
JavaScript不使用prototype和new实现继承机制
2014/12/29 Javascript
JavaScript 基本概念
2015/01/20 Javascript
jQuery实现简单二级下拉菜单
2015/04/12 Javascript
js实现文本框选中的方法
2015/05/26 Javascript
Angular 理解module和injector,即依赖注入
2016/09/07 Javascript
jQuery特殊符号转义的实现
2016/11/30 Javascript
Bootstrap导航条的使用和理解3
2016/12/14 Javascript
原生JS下拉加载插件分享
2016/12/26 Javascript
详细介绍RxJS在Angular中的应用
2017/09/23 Javascript
vue中动态绑定表单元素的属性方法
2018/02/23 Javascript
vue实现组件之间传值功能示例
2018/07/13 Javascript
用POSTMAN发送JSON格式的POST请求示例
2018/09/04 Javascript
微信小程序日历组件使用方法详解
2018/12/29 Javascript
[44:21]Ti4 循环赛第四日 附加赛NEWBEE vs LGD
2014/07/13 DOTA
用python读写excel的方法
2014/11/18 Python
基于Python3.6+splinter实现自动抢火车票
2018/09/25 Python
Python 实现某个功能每隔一段时间被执行一次的功能方法
2018/10/14 Python
python时间序列按频率生成日期的方法
2019/05/14 Python
浅析移动设备HTML5页面布局
2015/12/01 HTML / CSS
详解HTML5中的picture元素响应式处理图片
2018/01/03 HTML / CSS
自荐信包含哪些内容
2013/10/30 职场文书
机械电子工程专业推荐信范文
2013/11/20 职场文书
实习生体会的自我评价范文
2013/11/28 职场文书
干部职工纪律作风整改措施思想汇报
2014/10/11 职场文书
学校捐款活动总结
2015/05/09 职场文书
发票退票证明
2015/06/24 职场文书
用React Native制作一个简单的游戏引擎
2021/05/27 Javascript
浅谈如何提高PHP代码的质量
2021/05/28 PHP
JavaScript offset实现鼠标坐标获取和窗口内模块拖动
2021/05/30 Javascript