File size: 3,867 Bytes
6207b87
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Project      : Python.
# @File         : 991_streamlit_apex_charts
# @Time         : 2022/10/17 上午10:48
# @Author       : yuanjie
# @WeChat       : meutils
# @Software     : PyCharm
# @Description  : 


import psutil
import streamlit as st
import time
import datetime
from streamlit_autorefresh import st_autorefresh
from streamlit_apex_charts import bar_chart, pie_chart
import pandas as pd
import platform
import os


st.set_page_config(page_title="系统信息查看器", page_icon="💻", layout="wide")

#st_autorefresh(interval=5000, limit=100000, key="Mr.R")

st.header("系统信息查看器")
base_infor = [[datetime.datetime.now().strftime("%Y-%m-%d %H: %M: %S"),str(psutil.users()[0][0]),platform.platform()]]
df_base_infor = pd.DataFrame(base_infor, columns=["当前时间","登陆者","操作系统"])
st.table(df_base_infor)

#获取网卡名称
def get_key():
    key_info = psutil.net_io_counters(pernic=True).keys()  # 获取网卡名称
    recv = {}
    sent = {}
    for key in key_info:
        recv.setdefault(key, psutil.net_io_counters(pernic=True).get(key).bytes_recv)  # 各网卡接收的字节数
        sent.setdefault(key, psutil.net_io_counters(pernic=True).get(key).bytes_sent)  # 各网卡发送的字节数
    return key_info, recv, sent

#获取网卡速率
def get_rate(func):
    key_info, old_recv, old_sent = func()  # 上一秒收集的数据
    time.sleep(1)
    key_info, now_recv, now_sent = func()  # 当前所收集的数据
    net_in = {}
    net_out = {}
    for key in key_info:
        net_in.setdefault(key, (now_recv.get(key) - old_recv.get(key)) / 1024)  # 每秒接收速率
        net_out.setdefault(key, (now_sent.get(key) - old_sent.get(key)) / 1024) # 每秒发送速率
    return key_info, net_in, net_out


c1, c2, c3 = st.columns(3)

with c1:
    #内存
    mem = psutil.virtual_memory()
    zj = float(mem.total) / 1024 / 1024 / 1024
    ysy = float(mem.used) / 1024 / 1024 / 1024
    kx = float(mem.free) / 1024 / 1024 / 1024

    data_neicun = [[round(ysy,2),round(kx, 2)]]
    df_neicun = pd.DataFrame(data_neicun, columns=["已用内存","空闲内存"])
    pie_chart("内存使用情况(GB)", df_neicun)


    #CPU
    cpu_liyonglv = (str(psutil.cpu_percent(1))) + '%'
    cpu_data = [[cpu_liyonglv]]
    df_cpu = pd.DataFrame(cpu_data, columns=["CPU利用率"])
    bar_chart("CPU利用率(%)", df_cpu)

with c2:
    #磁盘
    dk = psutil.disk_usage('/')
    total = dk.total / 1024 / 1024 / 1024
    used = dk.used / 1024 / 1024 / 1024
    free = dk.free / 1024 / 1024 / 1024

    cipan_shiyong = [[used, free]]
    df_cipan = pd.DataFrame(cipan_shiyong, columns=["已使用磁盘大小","空闲磁盘大小"])
    pie_chart("磁盘使用率(%)", df_cipan)

    #网络速率
    key_info, net_in, net_out = get_rate(get_key)
    wangka_liuliang = []
    for key in key_info:
             wangka_liuliang.append([net_in.get(key),net_out.get(key)])
    speed_internet = wangka_liuliang
    df_speed = pd.DataFrame(speed_internet, columns=["下行速率","上行速率"])
    bar_chart("网络速率(kb/s)", df_speed)



with c3:
    #进程信息
    pids = psutil.pids()
    process = []
    for pid in pids:
        p = psutil.Process(pid)
        process_name = p.name()
        process.append([pid, process_name, p.is_running()])

    df_process = pd.DataFrame(process, columns=["PID","进程名","是否还在运行"])
    st.dataframe(df_process)

    # #已安装软件
    # import wmi
    # c = wmi.WMI()
    # software_list = []
    # for s in c.Win32_Product():
    #     software_list.append([s.Caption, s.Vendor, s.Version])
    # if len(software_list)>1:
    #     st.dataframe(pd.DataFrame(software_list, columns=["名称","发布人","版本"]))
    # else:
    #     st.info("正在导出已安装的软件程序列表")