由于Bash实在太恶心,很多运维工程师开始使用Python代替Bash写各种脚本。
虽然理论上可以用Python调用Bash指令实现各种功能,但是给各种命令写Bash wrapper还要解析输出实在太麻烦。所以我们还是希望用原生Python库来实现各种功能。
今天我推荐一个好用的Python库psutil。
psutil一个能够跨平台使用的库。可以用来获取系统信息(CPU、内存、磁盘、网络)和进程信息。
它可以被用来替代这些UNIX的系统命令:ps, top, lsof, netstat, ifconfig, who, df, kill, free, nice, ionice, iostat, iotop, uptime, pidof, tty, taskset, pmap
下面是一些具体例子:
>>> import psutil # 加载库
CPU占用率
>>> psutil.cpu_percent(interval=5) 12.9
CPU频率
>>> psutil.cpu_freq() scpufreq(current=2300, min=2300, max=2300)
CPU load
>>> psutil.getloadavg() (2.21044921875, 2.4814453125, 2.74609375)
内存使用状况
>>> psutil.virtual_memory() svmem(total=8589934592, available=1664913408, percent=80.6, used=5807058944, free=15069184, active=1651421184, inactive=1649065984, wired=4155637760)
磁盘分区信息
>>> psutil.disk_partitions() [sdiskpart(device='/dev/disk1s5', mountpoint='/', fstype='apfs', opts='ro,local,rootfs,dovolfs,journaled,multilabel', maxfile=255, maxpath=1024), ...]
磁盘占用率
>>> psutil.disk_usage('/') sdiskusage(total=250685575168, used=11233398784, free=14531440640, percent=43.6)
磁盘IO
>>> psutil.disk_io_counters() sdiskio(read_count=190236826, write_count=110716593, read_bytes=11349786423296, write_bytes=9505852936192, read_time=165443373, write_time=100234117)
网络连接 (netstat)
>>> import psutil >>> psutil.net_connections() [pconn(fd=115, family=<AddressFamily.AF_INET: 2>, type=<SocketType.SOCK_STREAM: 1>, laddr=addr(ip='10.0.0.1', port=48776), raddr=addr(ip='93.186.135.91', port=80), status='ESTABLISHED', pid=1254), pconn(fd=117, family=<AddressFamily.AF_INET: 2>, type=<SocketType.SOCK_STREAM: 1>, laddr=addr(ip='10.0.0.1', port=43761), raddr=addr(ip='72.14.234.100', port=80), status='CLOSING', pid=2987), pconn(fd=-1, family=<AddressFamily.AF_INET: 2>, type=<SocketType.SOCK_STREAM: 1>, laddr=addr(ip='10.0.0.1', port=60759), raddr=addr(ip='72.14.234.104', port=80), status='ESTABLISHED', pid=None), pconn(fd=-1, family=<AddressFamily.AF_INET: 2>, type=<SocketType.SOCK_STREAM: 1>, laddr=addr(ip='10.0.0.1', port=51314), raddr=addr(ip='72.14.234.83', port=443), status='SYN_SENT', pid=None) ...]
网络接口(ifconfig)
>>> psutil.net_if_addrs() {'lo': [snicaddr(family=<AddressFamily.AF_INET: 2>, address='127.0.0.1', netmask='255.0.0.0', broadcast='127.0.0.1', ptp=None), snicaddr(family=<AddressFamily.AF_INET6: 10>, address='::1', netmask='ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', broadcast=None, ptp=None), snicaddr(family=<AddressFamily.AF_LINK: 17>, address='00:00:00:00:00:00', netmask=None, broadcast='00:00:00:00:00:00', ptp=None)], 'wlan0': [snicaddr(family=<AddressFamily.AF_INET: 2>, address='192.168.1.3', netmask='255.255.255.0', broadcast='192.168.1.255', ptp=None), snicaddr(family=<AddressFamily.AF_INET6: 10>, address='fe80::c685:8ff:fe45:641%wlan0', netmask='ffff:ffff:ffff:ffff::', broadcast=None, ptp=None), snicaddr(family=<AddressFamily.AF_LINK: 17>, address='c4:85:08:45:06:41', netmask=None, broadcast='ff:ff:ff:ff:ff:ff', ptp=None)]}
电池
>>> psutil.sensors_battery() sbattery(percent=93, secsleft=15420, power_plugged=False)
当前用户
>>> psutil.users() [suser(name='myname', terminal='console', host=None, started=1604809088.0, pid=180), suser(name='yuliji', terminal='ttys012', host=None, started=1615375616.0, pid=13894)]
PID
>>> psutil.pids() [1, 2, 3, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, ..., 32498]
所有进程
>>> for proc in psutil.process_iter(['pid', 'name', 'username']): ... print(proc.info) ... {'name': 'systemd', 'pid': 1, 'username': 'root'} {'name': 'kthreadd', 'pid': 2, 'username': 'root'} {'name': 'ksoftirqd/0', 'pid': 3, 'username': 'root'}
详细文档,请参考: psutil.readthedocs.io/en/latest/
以上就是python psutil库的使用示例的详细内容,更多关于python psutil库的资料请关注小牛知识库其它相关文章!
本文向大家介绍PHP的cURL库简介及使用示例,包括了PHP的cURL库简介及使用示例的使用技巧和注意事项,需要的朋友参考一下 使用PHP的cURL库可以简单和有效地去抓网页。你只需要运行一个脚本,然后分析一下你所抓取的网页,然后就可以以程序的方式得到你想要的数据了。无论是你想从从一个链接上取部分数据,或是取一个XML文件并把其导入数据库,那怕就是简单的获取网页内容,cURL 是一个功能强大的PH
本文向大家介绍使用python库xlsxwriter库来输出各种xlsx文件的示例,包括了使用python库xlsxwriter库来输出各种xlsx文件的示例的使用技巧和注意事项,需要的朋友参考一下 功能性的文章直接用几个最简单的实现表达: xlsxwriter库的核心就是其Workbook对象。 创建一个指定名字的xlsx文件: 创建一个Workbook的实例对象。可以传入一个文件名字,如果不想
本文向大家介绍在ASP.NET MVC项目中使用RequireJS库的用法示例,包括了在ASP.NET MVC项目中使用RequireJS库的用法示例的使用技巧和注意事项,需要的朋友参考一下 RequireJS 是一个前端模块化开发的流行工具,本身是一个Javascript的库文件,即require.js 。 RequireJs的主要功能: (1)实现js文件的异步加载,避免网页失去响应; (2)
本文向大家介绍c# 使用Entity Framework操作Access数据库的示例,包括了c# 使用Entity Framework操作Access数据库的示例的使用技巧和注意事项,需要的朋友参考一下 Entity Framework是C#开发中最常见的ORM工具。默认Entity Framework只提供支持MSSQL的provider factory。但是开发者开源贡献了对SQLite、My
本文向大家介绍Yii 框架使用数据库(databases)的方法示例,包括了Yii 框架使用数据库(databases)的方法示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Yii 框架使用数据库(databases)的方法。分享给大家供大家参考,具体如下: 配置数据库连接 ¶ 开始之前,请确保你已经安装了 PHP PDO 扩展和你所使用的数据库的 PDO 驱动(例如 MySQL 的
本文向大家介绍Android的多媒体管理库Glide的基本使用示例,包括了Android的多媒体管理库Glide的基本使用示例的使用技巧和注意事项,需要的朋友参考一下 Glide 是一个android平台上的快速和高效的开源的多媒体资源管理库, 提供 多媒体文件的压缩,内存和磁盘缓存, 资源池的接口。 Glide 支持获取,解压展示视频, 图像和GIFs, Glide有一个可弹性的api可以让开