使用Python腳本監(jiān)測(cè)Raspberry Pi基本狀態(tài)
因?yàn)槲业臉漭山?jīng)常需要開啟著多項(xiàng)比較消耗資源的服務(wù),況且手頭上的樹莓派硬件資源比較吃緊,所以需要監(jiān)測(cè)基本狀態(tài)的頻率還是比較頻繁的。我本人最常使用的命令就是:
uptime
who
free -h
df -h /
top
ps
等等之類能夠監(jiān)測(cè)樹莓派當(dāng)前狀態(tài)的命令工具,(作為剛剛接觸樹莓派和Linux操作系統(tǒng)的小白,暫且先掌握這些命令吧,如果還有其他更加使用便捷、功能強(qiáng)大的命令工具,歡迎在評(píng)論區(qū)留言告訴我,互相交流學(xué)習(xí)經(jīng)驗(yàn)。)但是有時(shí)候分別執(zhí)行這些命令工具并不能很直觀地集中展示樹莓派當(dāng)前狀態(tài)信息,而且有些結(jié)果并不是我真正需要的。
“這還不簡(jiǎn)單嗎?寫一個(gè)這樣的shell腳本就完事了[doge]”,想要省時(shí)省力的朋友是這么想的。

啊這,要不你試著在命令行環(huán)境下執(zhí)行一下?[doge]
復(fù)雜的shell腳本不會(huì)寫,更好用的工具還沒找到,只能求助上手比較簡(jiǎn)單的Python了,簡(jiǎn)簡(jiǎn)單單寫一個(gè)Python腳本應(yīng)付一下,我的小目標(biāo)是能夠監(jiān)測(cè)當(dāng)前和CPU、內(nèi)存、交換空間、閃存卡相關(guān)的狀態(tài)。有了需求,咳咳,接下來就是面向搜索引擎編程,參考了以下文獻(xiàn):
類似功能的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
雖然已有的代碼樣例可以達(dá)到最終需求,但是還是不夠簡(jiǎn)單和優(yōu)化,所以我又狗尾續(xù)貂地根據(jù)基本原理調(diào)整了代碼。

獲取CPU當(dāng)前溫度,本著能不使用模擬shell執(zhí)行環(huán)境的os.popen工具就不使用的原則,查閱樹莓派官方幫助文檔,找到了記錄CPU當(dāng)前溫度的文件,那就使用IO讀寫完成獲取CPU溫度的目標(biāo)吧,單位攝氏度:

獲取CPU當(dāng)前時(shí)鐘頻率,os.popen工具實(shí)在太香了,雖然效率并不高(但是都已經(jīng)到了用Python編程的地步,能夠優(yōu)化的部分盡量?jī)?yōu)化),但是配合shell命令可以非常靈活的實(shí)現(xiàn)較為強(qiáng)大的功能,單位GHz:

獲取CPU當(dāng)前整體使用率,這里使用了曲線救國的方式獲取CPU整體使用率,查看top命令Cpu(s):有關(guān)CPU使用率信息的這一行可以發(fā)現(xiàn),使用率被分為用戶程序使用率、系統(tǒng)程序使用率以及IO操作使用率,只有閑置率是整體狀態(tài),索性利用閑置率比較簡(jiǎn)單的簡(jiǎn)介求得整體使用率:

獲取CPU平均負(fù)載率,依次分別是1min平均負(fù)載率,5min平均負(fù)載率,15min平均負(fù)載率:

獲取內(nèi)存相關(guān)的信息,包括內(nèi)存總大小、已使用大小、空閑大小,單位MiB,間接計(jì)算得到內(nèi)存使用率:

獲取交換空間相關(guān)信息,包括交換空間總大小、已使用大小、空閑大小,單位MiB,間接計(jì)算得到交換空間使用率:

獲取樹莓派系統(tǒng)閃存卡相關(guān)信息,包括總大小、已使用空間大小、可用空間大小,單位GiB,間接計(jì)算得到空間使用率:

呼,至此需要實(shí)現(xiàn)的功能都已經(jīng)實(shí)現(xiàn)并盡可能地優(yōu)化完善了,再加一點(diǎn)細(xì)節(jié),試著在樹莓派上測(cè)試一下效果吧:

整體上來看感覺還行吧,雖然數(shù)值上面可能沒那么精確(類型轉(zhuǎn)換還是少用為妙),通過這個(gè)簡(jiǎn)單的腳本大致能集中查看樹莓派當(dāng)前的基本狀態(tài)了,整整齊齊,心情舒暢,強(qiáng)迫癥的福音!

源代碼已提交至Gitee:https://gitee.com/greaterunoob/raspberry-pi-monitor
無需額外安裝工具庫,支持Python3.5之后版本,根據(jù)自己的功能需求修改腳本以更好地適用于自己的樹莓派。
另外,救救我這個(gè)Python小白吧,有精通Python類型注解使用方式的大神,能幫忙在評(píng)論區(qū)分享一些規(guī)范使用類型注解的經(jīng)驗(yàn)嗎?或者一些高級(jí)類型注解的案例也行,想學(xué)!
腳本中出現(xiàn)的各類疏漏、錯(cuò)誤或者代碼不規(guī)范的地方,歡迎在評(píng)論區(qū)批評(píng)指正!如果有更為簡(jiǎn)便、高效的代碼片段,也歡迎在評(píng)論區(qū)分享交流,相互學(xué)習(xí)。