使用Python脚本监测Raspberry Pi基本状态
因为我的树莓派经常需要开启着多项比较消耗资源的服务,况且手头上的树莓派硬件资源比较吃紧,所以需要监测基本状态的频率还是比较频繁的。我本人最常使用的命令就是:
uptime
who
free -h
df -h /
top
ps
等等之类能够监测树莓派当前状态的命令工具,(作为刚刚接触树莓派和Linux操作系统的小白,暂且先掌握这些命令吧,如果还有其他更加使用便捷、功能强大的命令工具,欢迎在评论区留言告诉我,互相交流学习经验。)但是有时候分别执行这些命令工具并不能很直观地集中展示树莓派当前状态信息,而且有些结果并不是我真正需要的。
“这还不简单吗?写一个这样的shell脚本就完事了[doge]”,想要省时省力的朋友是这么想的。

啊这,要不你试着在命令行环境下执行一下?[doge]
复杂的shell脚本不会写,更好用的工具还没找到,只能求助上手比较简单的Python了,简简单单写一个Python脚本应付一下,我的小目标是能够监测当前和CPU、内存、交换空间、闪存卡相关的状态。有了需求,咳咳,接下来就是面向搜索引擎编程,参考了以下文献:
类似功能的Python代码样例:http://allstack.net/wordpress/post-3322.html
awk命令工具入门教程:https://www.ruanyifeng.com/blog/2018/11/awk.html
Python类型注解官方文档:https://docs.python.org/zh-cn/3/library/typing.html
虽然已有的代码样例可以达到最终需求,但是还是不够简单和优化,所以我又狗尾续貂地根据基本原理调整了代码。

获取CPU当前温度,本着能不使用模拟shell执行环境的os.popen工具就不使用的原则,查阅树莓派官方帮助文档,找到了记录CPU当前温度的文件,那就使用IO读写完成获取CPU温度的目标吧,单位摄氏度:

获取CPU当前时钟频率,os.popen工具实在太香了,虽然效率并不高(但是都已经到了用Python编程的地步,能够优化的部分尽量优化),但是配合shell命令可以非常灵活的实现较为强大的功能,单位GHz:

获取CPU当前整体使用率,这里使用了曲线救国的方式获取CPU整体使用率,查看top命令Cpu(s):有关CPU使用率信息的这一行可以发现,使用率被分为用户程序使用率、系统程序使用率以及IO操作使用率,只有闲置率是整体状态,索性利用闲置率比较简单的简介求得整体使用率:

获取CPU平均负载率,依次分别是1min平均负载率,5min平均负载率,15min平均负载率:

获取内存相关的信息,包括内存总大小、已使用大小、空闲大小,单位MiB,间接计算得到内存使用率:

获取交换空间相关信息,包括交换空间总大小、已使用大小、空闲大小,单位MiB,间接计算得到交换空间使用率:

获取树莓派系统闪存卡相关信息,包括总大小、已使用空间大小、可用空间大小,单位GiB,间接计算得到空间使用率:

呼,至此需要实现的功能都已经实现并尽可能地优化完善了,再加一点细节,试着在树莓派上测试一下效果吧:

整体上来看感觉还行吧,虽然数值上面可能没那么精确(类型转换还是少用为妙),通过这个简单的脚本大致能集中查看树莓派当前的基本状态了,整整齐齐,心情舒畅,强迫症的福音!

源代码已提交至Gitee:https://gitee.com/greaterunoob/raspberry-pi-monitor
无需额外安装工具库,支持Python3.5之后版本,根据自己的功能需求修改脚本以更好地适用于自己的树莓派。
另外,救救我这个Python小白吧,有精通Python类型注解使用方式的大神,能帮忙在评论区分享一些规范使用类型注解的经验吗?或者一些高级类型注解的案例也行,想学!
脚本中出现的各类疏漏、错误或者代码不规范的地方,欢迎在评论区批评指正!如果有更为简便、高效的代码片段,也欢迎在评论区分享交流,相互学习。