网站首页 > 技术文章 正文
简介
这是一个获取Linux下的磁盘空间信息的脚本,通过Linux下的df命令获取到全部的磁盘空间的使用情况,然后在去掉临时空间等行的信息,只保留物理硬盘的信息。信息包括分区的文件系统类型、空间大小、已用大小、可用大小、已用百分比、挂载点。整体有效代码连同注释共39行,除去主入口、注释行和空白行,实际有效代码仅20行而已。有兴趣体验这个脚本的朋友可以直接创建一个.py文件,然后把完整代码直接复制过去,保存后运行即可。下面是运行的结果截图。
完整的代码
import os
import prettytable
def diskInfo():
# 直接使用shell命令的df加参数hT获取磁盘分区的信息和文件系统格式
# 使用grep的vE过滤掉tmpfs的分区和docker的挂载卷overlay,这样得到的才是物理硬盘的分区信息
disk_list = os.popen('df -hT|grep -vE "(tmpfs|overlay)"').readlines()
# 初始化第三方库prettytable,用于将数据在输出是美化为表格
table = prettytable.PrettyTable()
# 拆分数据,用于prettytable的表头,直接复制list就可以。
title = disk_list[0].split(' ')
new_title = []
for item in title:
# 按照上面用空格拆分,存在有空值的元素,需要抛弃
if item == '':
continue
new_title.append(item.replace('\n', ''))
# 添加表格的表头
table.field_names = new_title
# 拆分数据,用于表的内容,有多少条数据就循环几次
for item in disk_list[1:]:
new_item = []
for item2 in item.split(' '):
# 按照上面用空格拆分,存在有空值的元素,需要抛弃
if item2 == '':
continue
new_item.append(item2.replace('\n', ''))
# 添加数据到表格中
table.add_row(new_item)
print(table)
if __name__ == '__main__':
diskInfo()
代码解析
第1~2行代码
import os
import prettytable
这个脚本的使用到的库很少,只有两个,内置的os库和第三方的prettytable。prettytable需要安装才可以使用,否则脚本会报错。安装的命令pip install prettytable。
第38~39行代码
if __name__ == '__main__':
systemInfo()
可以理解为运行这个文件时的主入口,在python中,文件独立运行时,它的魔法函数 __name__ 会返回 __main__ 而在该文件被其他文件引用调用的时候,则不是返回 __main__ 。这个入口的意思就是,运行这个脚本文件的时候,就执行 systemInfo() 函数。函数在上面的第5~28行中已经定义了。
第7行代码
disk_list = os.popen('df -hT|grep -vE "(tmpfs|overlay)"').readlines()
代码里面的注释也已经解释得很清楚了,利用os库的popen()函数,直接在命令行里面执行df命令查看并且过滤掉临时文件系统(tmpfs)和docker的文件系统(overlay),然后赋值给变量名disk_list,为什么变量名有list,因为readlines()函数返回的就是一个list类型。df -hT命令后面的两个参数h是df命令输出的结果为符合人类阅读的格式,如xxxM、xxxG这样有M、G、T等计数单位的信息。比较方便阅读。grep -vE "(tmpfs|overlay)"'参数v是表示这个过滤的结果为不显示的,E "(tmpfs|overlay)"参数是用正则搜索包含tmpfs或者overlay的行。包含着两个的行,都是不需要的,配合前面的参数v,就可以把包含这两种情况的行隐藏不显示。符合咱们只需要物理磁盘信息的需求。
第7行代码
table = prettytable.PrettyTable()
初始化一个表格并赋值给变量名table,这个表格用于美化后面的输出。
第13~22行代码
title = disk_list[0].split(' ')
new_title = []
for item in title:
if item == '':
continue
new_title.append(item.replace('\n', ''))
table.field_names = new_title
这几行代码,主要的作用是把上面提及的df命令中获取到的信息取出来第一个元素里面的信息,这些信息是表头的内容,取出后需要用空格分割,在去掉内用的空格内容,还有去掉换行符,组成一个新的list,再将这个list赋值给表格的表头。
第25~34行代码
for item in disk_list[1:]:
new_item = []
for item2 in item.split(' '):
if item2 == '':
continue
new_item.append(item2.replace('\n', ''))
table.add_row(new_item)
和上面组合表头的代码类似,不过这行做的处理是处理第二个元素及以后的元素,一个元素为一行,同样是去空白和去换行符的处理,然后一个元素的内容处理为一个list,添加为表格的一行。
第36行代码
print(table)
将上面组合并美化为表格的内容输出到命令行。也就是最开始图片里面那样的输出结果。
如果您对我的文章有兴趣,我把我发布的文章都归档到我私人网站中去,欢迎访问 Corner 三的小角落 -- 首页 查阅之前的文章。
猜你喜欢
- 2025-01-11 Python国内第三方镜像下载
- 2025-01-11 Python其实很简单 第十四章 模块
- 2025-01-11 TTS它又来了!OpenVoice一款借鉴于TTS实现的强大AI语音克隆工具
- 2025-01-11 Qt 调用Python引擎混合编程
- 2025-01-11 如何利用Python开发一个Web网站路径扫描工具?
- 2025-01-11 Pydantic:强大的Python 数据验证库
- 2025-01-11 新一代Python包管理工具来了
- 2025-01-11 python 基础(四)
- 2025-01-11 Python每日一库之orjson
- 2025-01-11 PySide:基于 Qt 框架的 Python 高级 UI 库
- 05-25Python 3.14 t-string 要来了,它与 f-string 有何不同?
- 05-25Python基础元素语法总结
- 05-25Python中的变量是什么东西?
- 05-25新手常见的python报错及解决方案
- 05-2511-Python变量
- 05-2510个每个人都是需要知道Python问题
- 05-25Python编程:轻松掌握函数定义、类型及其参数传递方式
- 05-25Python基础语法
- 257℃Python短文,Python中的嵌套条件语句(六)
- 257℃python笔记:for循环嵌套。end=""的作用,图形打印
- 256℃PythonNet:实现Python与.Net代码相互调用!
- 251℃Python操作Sqlserver数据库(多库同时异步执行:增删改查)
- 251℃Python实现字符串小写转大写并写入文件
- 106℃原来2025是完美的平方年,一起探索六种平方的算吧
- 90℃Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 81℃Ollama v0.4.5-v0.4.7 更新集合:Ollama Python 库改进、新模型支持
- 最近发表
- 标签列表
-
- python中类 (31)
- python 迭代 (34)
- python 小写 (35)
- python怎么输出 (33)
- python 日志 (35)
- python语音 (31)
- python 工程师 (34)
- python3 安装 (31)
- python音乐 (31)
- 安卓 python (32)
- python 小游戏 (32)
- python 安卓 (31)
- python聚类 (34)
- python向量 (31)
- python大全 (31)
- python次方 (33)
- python桌面 (32)
- python总结 (34)
- python浏览器 (32)
- python 请求 (32)
- python 前端 (32)
- python验证码 (33)
- python 题目 (32)
- python 文件写 (33)
- python中的用法 (32)