使用Jinjia2模板生成HTML文件

# rpt_tmpl.html
<html>
    <head><title>監(jiān)控信息</title>
        <h2>{{host_name}}主機(jī)系統(tǒng)信息</h2>
        <h3>采集時(shí)間:{{test_time}}</h3>
    <body>
        <table width=400 border="1">
            <tr><td>CPU數(shù)量</td><td>{{cpu_count}}</td></tr>
            <tr><td>cpu使用率</td><td>{{cpu_percent}}%</td></tr>
            <tr><td>內(nèi)存總量</td><td>{{mem_total}}</td></tr>
            <tr><td>已用內(nèi)存</td><td>{{mem_used}}</td></tr>
            <tr><td>空閑內(nèi)存</td><td>{{mem_free}}</td></tr>
            <tr><td>內(nèi)存使用率</td><td>{{mem_percent}}%</td></tr>
            <tr><td>磁盤空間總量</td><td>{{disk_total}}</td></tr>
            <tr><td>磁盤已用空間</td><td>{{disk_used}}</td></tr>
            <tr><td>磁盤剩余空間</td><td>{{disk_free}}</td></tr>
            <tr><td>磁盤空間使用率</td><td>{{disk_percent}}%</td></tr>
            <tr><td>磁盤讀取數(shù)據(jù)</td><td>{{disk_read}}</td></tr>
            <tr><td>磁盤寫入數(shù)據(jù)</td><td>{{disk_write}}</td></tr>
            <tr><td>網(wǎng)卡發(fā)送數(shù)據(jù)</td><td>{{net_sent}}</td></tr>
            <tr><td>網(wǎng)卡接收數(shù)據(jù)</td><td>{{net_recv}}</td></tr>
        </table>
    </body>
</html>

# sysinfo_tohtml.py
import os
import socket
import jinja2
from datetime import datetime
# 導(dǎo)入sysinfo_bypsutil模塊
from sysinfo_bypsutil import gather_monitor_data
''' 定義使用文件系統(tǒng)加載器的模板渲染函數(shù) '''
def render(tpl_path, **kwargs):
    path, filename = os.path.split(tpl_path)
    return jinja2.Environment(
        loader=jinja2.FileSystemLoader(path or './')
    ).get_template(filename).render(**kwargs)
if __name__ == '__main__':
    host_name = socket.gethostname()                              # 獲取主機(jī)名
    test_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") # 獲取當(dāng)前時(shí)間
    data = gather_monitor_data()                                   # 獲取系統(tǒng)信息
    data.update(dict(host_name=host_name))
    data.update(dict(test_time=test_time))
    html_content = render('rpt_tmpl.html', **data)              # 渲染模板
    file_name="sysinfo-"+test_time+".html"                        # HTML文件名
    with open(file_name, 'w', encoding='utf-8') as f:
        f.write(html_content)

# sysinfo_bypsutil.py
import psutil
import socket

'''通用的字節(jié)轉(zhuǎn)換函數(shù)'''
def bytes2human(n):
    symbols = ('K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y')
    prefix = {}
    for i, s in enumerate(symbols):
        prefix[s] = 1 << (i + 1) * 10
    for s in reversed(symbols):
        if n >= prefix[s]:
            value = float(n) / prefix[s]
            return '%.1f%s' % (value, s)
    return "%sB" % n

'''獲取CPU信息'''
def get_cpu_info():
    cpu_count = psutil.cpu_count()
    cpu_percent = psutil.cpu_percent(interval=2)
    return dict(cpu_count=cpu_count, cpu_percent=cpu_percent)

'''獲取內(nèi)存信息'''
def get_memory_info():
    virtual_mem = psutil.virtual_memory()
    mem_total = bytes2human(virtual_mem.total)
    mem_used = bytes2human(virtual_mem.total * virtual_mem.percent)
    mem_free = bytes2human(virtual_mem.free + virtual_mem.buffers + virtual_mem.cached)
    mem_percent = virtual_mem.percent
    return dict(mem_total=mem_total, mem_used=mem_used,mem_free=mem_free,mem_percent=mem_percent)

'''獲取磁盤信息'''
def get_disk_info():
    disk_usage = psutil.disk_usage('/')
    disk_total = bytes2human(disk_usage.total)
    disk_used = bytes2human(disk_usage.used)
    disk_free = bytes2human(disk_usage.free)
    disk_percent = disk_usage.percent
    disk_io = psutil.disk_io_counters()
    disk_read = bytes2human(disk_io.read_bytes)
    disk_write = bytes2human(disk_io.write_bytes)
    return dict(disk_total=disk_total,disk_used=disk_used,disk_free=disk_free, disk_percent=disk_percent,disk_read=disk_read,disk_write=disk_write)

'''獲取網(wǎng)絡(luò)信息'''
def get_net_info():
    net_io = psutil.net_io_counters()
    net_sent = bytes2human(net_io.bytes_sent)
    net_recv = bytes2human(net_io.bytes_recv)
    return dict(net_sent=net_sent,net_recv=net_recv)

'''匯集系統(tǒng)信息'''
def gather_monitor_data():
    data = {}
    data.update(get_cpu_info())
    data.update(get_memory_info())
    data.update(get_disk_info())
    data.update(get_net_info())
    return data

'''報(bào)告結(jié)果'''
def report():
    # 獲取主機(jī)名
    hostname = socket.gethostname()
    data = gather_monitor_data()
    data.update(dict(hostname=hostname))
    # 輸出系統(tǒng)信息
    print(f"{hostname}主機(jī)系統(tǒng)信息")
    print("—————————————————————————")
    print(f"CPU數(shù)量:{data['cpu_count']}")
    print(f"CPU使用率:{data['cpu_percent']}%")
    print("—————————————————————————")
    print(f"內(nèi)存總量:{data['mem_total']}")
    print(f"已用內(nèi)存:{data['mem_used']}")
    print(f"空閑內(nèi)存:{data['mem_free']}")
    print(f"內(nèi)存使用率:{data['mem_percent']}%")
    print("—————————————————————————")
    print(f"磁盤空間總量:{data['disk_total']}")
    print(f"磁盤已用空間:{data['disk_used']}")
    print(f"磁盤剩余空間:{data['disk_free']}")
    print(f"磁盤空間使用率:{data['disk_percent']}%")
    print(f"磁盤讀取數(shù)據(jù):{data['disk_read']}")
    print(f"磁盤寫入數(shù)據(jù):{data['disk_write']}")
    print("—————————————————————————")
    print(f"網(wǎng)卡發(fā)送數(shù)據(jù):{data['net_sent']}")
    print(f"網(wǎng)卡接收數(shù)據(jù):{data['net_recv']}")

if __name__ == '__main__':
    report()

image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市温技,隨后出現(xiàn)的幾起案子躬厌,更是在濱河造成了極大的恐慌抗碰,老刑警劉巖膏萧,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件狰住,死亡現(xiàn)場(chǎng)離奇詭異景鼠,居然都是意外死亡葛菇,警方通過查閱死者的電腦和手機(jī)从媚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門逞泄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人拜效,你說我怎么就攤上這事喷众。” “怎么了紧憾?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵到千,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我赴穗,道長(zhǎng)父阻,這世上最難降的妖魔是什么愈涩? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮加矛,結(jié)果婚禮上履婉,老公的妹妹穿的比我還像新娘。我一直安慰自己斟览,他們只是感情好毁腿,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著苛茂,像睡著了一般已烤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上妓羊,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天胯究,我揣著相機(jī)與錄音,去河邊找鬼躁绸。 笑死裕循,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的净刮。 我是一名探鬼主播剥哑,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼淹父!你這毒婦竟也來了株婴?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤暑认,失蹤者是張志新(化名)和其女友劉穎困介,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蘸际,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡座哩,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了捡鱼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片八回。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖驾诈,靈堂內(nèi)的尸體忽然破棺而出缠诅,到底是詐尸還是另有隱情,我是刑警寧澤乍迄,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布管引,位于F島的核電站,受9級(jí)特大地震影響闯两,放射性物質(zhì)發(fā)生泄漏褥伴。R本人自食惡果不足惜谅将,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望重慢。 院中可真熱鬧饥臂,春花似錦、人聲如沸似踱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽核芽。三九已至囚戚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間轧简,已是汗流浹背驰坊。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留哮独,地道東北人拳芙。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像借嗽,于是被迫代替她去往敵國(guó)和親态鳖。 傳聞我的和親對(duì)象是個(gè)殘疾皇子转培,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容