用Python實現(xiàn)手機實時監(jiān)控電腦資源
點擊關(guān)注“Python數(shù)據(jù)分析實例”
設(shè)為“置頂或星標(biāo)”,送達干貨不錯過!
大家好,我是Brook!
今日主題:如何通過手機遠程查看電腦應(yīng)用資源消耗情況
有時候我們想查看電腦進程列表,實時掌握電腦或服務(wù)器資源消耗情況,或某指定應(yīng)用資源消耗情況,最快速的方法就是通過Web框架開發(fā)部署可訪問的網(wǎng)站。
1、系統(tǒng)信息監(jiān)控psutil模塊,獲取監(jiān)控應(yīng)用指標(biāo)(這里主要包括進程pid、應(yīng)用名稱name、內(nèi)存信息memory_info等,具體其他參數(shù)獲取可查看文檔手冊。),生成data.json數(shù)據(jù)供后續(xù)網(wǎng)頁模板用。
2、利用Flask生成展示網(wǎng)頁,首先準(zhǔn)備展示模板template.html,加載數(shù)據(jù)映射到對應(yīng)的模板中輸出展示網(wǎng)頁。
創(chuàng)建項目目錄
1)、創(chuàng)建目錄
mkdir myProjectfile (linux、window通用,當(dāng)然也可以手動建一個文件夾命名)
2)進入目錄
cd myProjectfile (也可以直接打開建立的文件夾路徑cmd命令進入)
3)配置虛擬環(huán)境路徑
linux: export PIPENV_VENV_IN_PROJECT=1
window: set PIPENV_VENV_IN_PROJECT=1 (注意項目不能在C盤,如果此處沒有設(shè)置,默認虛擬環(huán)境路徑在C盤下)
4)創(chuàng)建虛擬環(huán)境
pipenv install
5)激化環(huán)境
pipenv shell
6)安裝需要的包
pipenv install flask/psutil使用psutil.process_iter獲取進程相關(guān)信息,返回結(jié)果是一個可迭代對象,每個元素的info是一個字典,通過字典鍵值對獲取我們關(guān)注的信息。如CPU占用、內(nèi)存占用(rss就是實際占用的內(nèi)存)、進程線程數(shù)等
# 獲取系統(tǒng)進程信息
def find_procs():
dic={}
for proc in psutil.process_iter(attrs=['memory_info','name','pid']):
pinfo = proc.as_dict(attrs=['name', 'memory_info'])
pid1 = proc.info.get('pid')
# 當(dāng)前進程的內(nèi)存使用
memory = psutil.Process(pid1).memory_info().rss / 1024 / 1024
# 設(shè)置過濾條件,查看指定應(yīng)用
# if proc.info['name'].startswith('WeChat'):
if pinfo.get("name").startswith('WeChat') and memory > 20:
pinfo['memory_info'] = str(round(memory,1)) +'MB'
print(pinfo)
k = pinfo.get("name")
v = pinfo.get("memory_info")
dic[k] = v
js=json.dumps(dic)
file = open(r'data.json', 'w')
file.write(js)
file.close()
print(dic)
return dic
二、編寫業(yè)務(wù)視圖函數(shù)
#route裝飾器創(chuàng)建路由
@app.route('/')
def Show_html(): #訪問路由時執(zhí)行的視圖函數(shù)
find_procs()
with open("data.json") as f:
data = json.loads(f.read())
print(data) #加載json數(shù)據(jù)
content = ""
for i, (name,memory_info) in enumerate(data.items()):
content += "<tr>"
content += f"<td>{i + 1}</td>"
content += f"<td>{name}</td>"
content += f"<td>{memory_info}</td>"
content += "</tr>"
#打開模板 ---復(fù)制bootstrap的代碼,是通過遠程方式加載出來的
with open("template.html",encoding='UTF-8') as t:
template = string.Template(t.read())
#生成網(wǎng)頁
output_html = template.substitute(elements=content)
with open("report.html", "w",encoding='UTF-8') as output:
output.write(output_html)
return output_html
最后運行主函數(shù)
from flask import Flask
import psutil
import json
import string
app = Flask(__name__) #創(chuàng)建應(yīng)用實例
if __name__=="__main__":
app.run(host="0.0.0.0",port=8888)

復(fù)制本機網(wǎng)址發(fā)送到手機微信,即可快速訪問查看,這里未將應(yīng)用部署上線,手機查看前提是連到同一個局域網(wǎng),簡單可連接同一網(wǎng)絡(luò)路由器wifi。
不看不知道,啟用了快百個應(yīng)用,難怪我電腦這么卡

監(jiān)控指定應(yīng)用

當(dāng)然應(yīng)用場景不限于查看系統(tǒng)信息資源列表,進一步可對系統(tǒng)應(yīng)用、網(wǎng)絡(luò)資源可視化進行查看,相關(guān)應(yīng)用可自行拓展比如通過手機端控制電腦程序的開啟關(guān)閉即殺掉相關(guān)進程。
后臺回復(fù):【手機監(jiān)控】獲取完整代碼
