Python实现读取Linux系统的CPU以及内存占用
作者:?黎明之光? 发布时间:2021-06-22 06:59:31
直接贴代码
import subprocess
def get_system_stats():
# 通过 shell 命令获取 CPU 使用率和内存使用率
cpu_command = "top -bn1 | grep '%Cpu(s)' | awk '{print $2}'"
memory_command = "free | grep Mem | awk '{print $3/$2 * 100.0}'"
# 执行命令并获取输出结果
cpu_result = subprocess.check_output(cpu_command, shell=True).decode().strip()
memory_result = subprocess.check_output(memory_command, shell=True).decode().strip()
# 转换结果为浮点数
cpu_usage = float(cpu_result)
memory_usage = float(memory_result)
# 返回 CPU 使用率和内存使用率
return cpu_usage, memory_usage
# 调用函数并获取结果
cpu_usage, memory_usage = get_system_stats()
print("CPU 使用率: ", cpu_usage)
print("内存使用率: ", memory_usage)
在上述示例中,get_system_stats 函数使用 subprocess 模块执行 shell 命令来获取系统的 CPU 使用率和内存使用率。通过 top 命令和 grep、awk 进行过滤和提取相关信息,并将结果转换为浮点数后返回。
代码解释:
cpu_command = "top -bn1 | grep '%Cpu(s)' | awk '{print $2}'"
让我们逐步解释这个命令的每个部分:
1.top -bn1: 这是 top 命令的参数,用于显示系统资源的实时使用情况。-b 表示以批处理模式运行,n1 表示只运行一次。
2.grep '%Cpu(s)': 这是 grep 命令的参数,用于在命令的输出中筛选包含 %Cpu(s) 的行。%Cpu(s) 是 top 命令输出中 CPU 使用率相关信息的标识。
3.awk '{print $2}': 这是 awk 命令的参数,用于提取每行的第二个字段并进行打印。在这里,awk 命令将提取第二个字段,即 CPU 使用率的数值。
综合起来,这个命令的作用是运行 top 命令获取系统资源信息,并通过管道传递给 grep 命令进行筛选,然后再传递给 awk 命令提取 CPU 使用率的数值。最终,cpu_command 变量会保存这个完整的 shell 命令字符串。
在 Python 代码中,subprocess.check_output(cpu_command, shell=True) 的作用是执行这个 shell 命令,并将输出结果以字符串的形式返回。
memory_command = "free | grep Mem | awk '{print $3/$2 * 100.0}'"
让我们逐步解释这个命令的每个部分:
1.free: 这是 free 命令,用于显示系统内存使用情况。
2.grep Mem: 这是 grep 命令的参数,用于筛选包含 "Mem" 的行,以过滤出与内存相关的信息。
3.awk '{print $3/$2 * 100.0}': 这是 awk 命令的参数,用于计算内存使用率。它提取每行的第三个字段(已使用内存)和第二个字段(总内存),然后将其相除并乘以 100,得到内存使用率。
综合起来,这个命令的作用是运行 free 命令获取系统内存信息,并通过管道传递给 grep 命令进行筛选,然后再传递给 awk 命令计算内存使用率。最终,memory_command 变量会保存这个完整的 shell 命令字符串。
在 Python 代码中,subprocess.check_output(memory_command, shell=True) 的作用是执行这个 shell 命令,并将输出结果以字符串的形式返回。
请注意,上述代码是一个示例,你可以根据你的需求和具体的 Linux 系统进行适当的调整和改进。另外,需要确保你的 Python 环境中已经安装了相关的依赖和工具,以使 subprocess 模块能够正常工作。
结果如下:
知识补充
Python不仅可以读取linux系统的cpu以及内存占用,也可以读取docker资源占用,下面是实现代码,需要的可以参考一下
函数内部使用该名称获取相应的容器对象,并计算 CPU 使用率和内存使用率。最后,函数返回这两个结果供调用者使用。
def get_container_stats(container_name):
client = DockerClient() # 假设你已经初始化了 Docker 客户端
container = client.containers.get(container_name)
stats = container.stats(stream=False)
cpu_usage = 100 * stats['cpu_stats']['cpu_usage']['total_usage'] / stats['cpu_stats']['system_cpu_usage']
memory_used = 100 * stats['memory_stats']['usage'] / stats['memory_stats']['limit']
return cpu_usage, memory_used
# 调用函数并获取结果
container_name = 'ueransim-slice1'
cpu_usage, memory_used = get_container_stats(container_name)
print("CPU 使用率: ", cpu_usage)
print("内存使用率: ", memory_used)
来源:https://blog.csdn.net/weixin_44810982/article/details/130749254


猜你喜欢
- 数组的定义:方法1.var mycars=new Array()mycars[0]="Saab"mycars[1]=&q
- 一般来说,使用线程有两种模式, 一种是创建线程要执行的函数, 把这个函数传递进Thread对象里,让它来执行. 另一种是直接从Thread继
- 前端开发中两个很不错的小技巧, CSS三角形与圆角背景. 的确, 它们都可以通过图片来实现, 但, 抛开用代码实现可以减小图片加载量不说,
- 文本:每行在promotion后面包含一些数字,如果这些数字是相同的,则认为是相同的行,对于相同的行,只保留一行。思路:根据字典和字符串切割
- VSCode插件安装完成后,有些插件如果你想要完整的使用其中的功能得在settings.json中就行配置,接下来是我常用的一些配置{ &n
- 问题描述最近做一个项目,是用Python进行相关的串口操作。及将相关指令通过串口发给设备,设备根据发过来的指令来做出相应的操作,所用的库是P
- 本文实例为大家分享了Python求多幅图像栅格值的平均值,供大家参考,具体内容如下本程序所采用的方法并不是最优方法,ARCGIS已经提供了相
- 当我们的文章表中没有对于文章的评论数字段时,我们该这么写sql语句来显示出评论最多的文章呢?下面本站给大家收集了几种方法,仅供参考:1.se
- 最近也是学习了一些爬虫方面的知识。以我自己的理解,通常我们用浏览器查看网页时,是通过浏览器向服务器发送请求,然后服务器响应以后返回一些代码数
- Mysql数据库常用命令:启动Mysql数据库C:》cd Mysql5.0 binC:Mysql5.0 bin》mysqld –instal
- 今天在项目中,使用Mybatis对oracle数据库进行操作的时候,报出ORA-00911: invalid character的错误,检查
- 本文实例讲述了Python使用re模块正则提取字符串中括号内的内容操作。分享给大家供大家参考,具体如下:直接上代码吧:# -*- codin
- 丢弃现有MySQL的表是很容易的。但是需要非常小心,删除任何现有的一个表后将无法恢复,因为数据丢失。语法:下面是通用的SQL语法丢弃(删除)
- 0. 前言无论在工作中,还是学习中,都会出现这样子的需求,对某张表进行了排序(按时间排序也好,其他字段排序也罢),然后获取前x行的数据,由于
- 整理自慕课笔记基础表单表单主要功能是用来与用户做交流的一个网页控件,良好的表单设计能够让网页与用户更好的沟通。表单中常见的元素主要包括:文本
- eWebEditor V2.80最终版 说明 目录结构说明 =============================
- 最近在学习python著名的绘图包matplotlib时发现,有时候图例等设置无法正常显示中文,于是就想把这个问题解决了。PS:本文仅针对W
- 在Python语言中,Uincode字符串处理一直是一个容易让人迷惑的问题。许多Python爱好者经常因为搞不清Unicode、UTF-8还
- 话不多说上代码!源代码from tkinter import *import pyttsx3class Application(Frame)
- <script>var d = '2013-07-21';var nd = d.replace(new RegE