一、psutil模块获取主机信息
官方文档:http://psutil.readthedocs.io/en/latest/
安装:pip3 install psutil
1、获取当前系统登录的用户信息
import psutil 导入模块
psutil.users()
2、获取开机时间
In [57]: psutil.boot_time() 以linux时间格式返回
Out[57]: 1578360917.0
**转换成易读的str时间格式**
In [59]: struct_dt = datetime.datetime.fromtimestamp(psutil.boot_time())
...:
In [61]: str(struct_dt)
Out[61]: '2020-01-07 09:35:17'
3、查看cpu信息
import psutil
# 查看cpu所有信息
psutil.cpu_time()
# 显示cpu所有逻辑信息
psutil.cpu_time(percpu=True)
# 查看用户的cpu时间比
psutl.cpu_times().user
#查看cou逻辑个数
psutil.cpu_count()
#查看cpu物理个数
psutil.cpu_count(logical=False)
4、查看系统内存
import psutil
>>> mem = psutil.virtual_memory()
系统总计内存
>>> mem.total
系统已经使用内存
>>> mem.used
系统空闲内存
>>> mem.free
获取swap内存信息
>>> psutil.swap_memory()
5、读取磁盘参数
磁盘IO信息包括read_count(读IO数),write_count(写IO数) read_bytes(IO写字节数),read_time(磁盘读时间),write_time(磁盘写时间),这些IO信息用
psutil.disk_io_counters() 读取磁盘参数
1.获取单个分区io个数
psutil.disk_io_counters(perdisk=True)
2.获取分区表的参数
psutil.disk_usage('/') 获取/分区的状态
3.磁盘使用率
psutil.disk_usage()
4.获取磁盘的完整分区信息
psutil.disk_partitions()
6、读取网络信息
网络信息与磁盘IO信息类似,涉及到几个关键点,包括byes_sent(发送字节数),byte_recv=xxx(接受字节数), pack-ets_sent=xxx(发送字节数),pack-ets_recv=xxx(接收数据包数),这些网络信息用
1.获取网络IO信息
psutil.net_io_counters()
2.输出网络每个接口信息
psutil.net_io_counters(pernic=True)
3.网卡地址信息
psutil.net_if_addrs()
7、系统进程管理
获取当前系统的进程信息,获取当前程序的运行状态,包括进程的启动时间,查看设置CPU亲和度,内存使用率,IO信息 socket连接,线程数等 获取进程信息
psutil.pids() 系统进程pid
1.查看系统全部进程
p = psutil.Process(+pid)
p.name() 进程名
p.exe() 进程的bin路径
p.cwd() 进程的工作目录绝对路径
p.status() 进程状态
p.create_time 进程创建时间
p.uids() 进程uid信息
p.gids() 进程的gid信息
p.cpu_times() 进程的cpu时间
p.cpu_affinity() get进程cpu亲和度
p.memory_percent() 进程内存利用率
p.memory_info() 进程内存rss,vms信息
p.io_counters() 进程IO信息
p.connections() 返回进程列表
p.num_threads() 返回开启的线程数
二、psutil模块实现Linux 主机信息获取和展示系统
import psutil
获取当前系统的登录用户数
login_user = len(psutil.users())
1、获取CPU数据的函数
import psutil
def get_cpu():
cpu_count = len(psutil.Process().cpu_affinity())
cpu_py_count = psutil.cpu_count(logical=False)
cpu_info = psutil.cpu_times_percent(interval=0.1)
return cpu_count,cpu_py_count,cpu_info
#打印cpu函数
def dis_cpu():
cpu_count,cpu_py_count,cpu_info = get_cpu()
all = "cpu颗数:{cpu_count} 物理核心数:{cpu_py_count} 使用率:{cpu_info}"
print(all.format(
cpu_count=cpu_count,
cpu_py_count=cpu_py_count,
cpu_info=cpu_info))
dis_cpu()
2、获取内存数据的函数
import psutil
#tools.py
from tools import bytes2human
def get_mem():
#内存信息
return psutil.virtual_memory()
def dis_mem():
mem_info = get_mem()
print("*" * 16,"内存信息","*" * 16)
tpl = "内存总容量:{total} | 内存已使用:{used} | 内存剩余容量:{free}"
print(tpl.format(total=mem_info.total,
used=mem_info.used,
free=mem_info.free))
if __name__=="__main__":
dis_mem()
3、获取网卡数据的信息
import socket
import psutil
#获取网卡的地址信息
net_ip_dic = psutil.net_if_addrs()
#获取网卡的状态信息,返回的是个字典{}
net_stat_dic = psutil.net_if_stats()
for net_name,net_info in net_ip_dic.items():
if net_name == 'lo':
continue
net_stat = net_stat_dic[net_name]
print(f"网络 {net_name} 的状态是:{net_stat.isup}")
for addr in net_info: #循环每块网卡地址的每类信息
if addr.family == socket.AF_INET:
print("IPV4",addr.address, f"NETMASK:{addr.netmask}")
elif addr.family == socket.AF_PACKET:
print(f"MAC地址: {addr.address}")
4、主逻辑函数
import psutil
import sys
import socket
def get_cpu():
cpu_count = len(psutil.Process().cpu_affinity())
cpu_py_count = psutil.cpu_count(logical=False)
cpu_info = psutil.cpu_times_percent(interval=0.1)
return cpu_count,cpu_py_count,cpu_info
def dis_cpu():
cpu_count,cpu_py_count,cpu_info = get_cpu()
all = "cpu颗数:{cpu_count} 物理核心数:{cpu_py_count} 使用率:{cpu_info}"
print(all.format(
cpu_count=cpu_count,
cpu_py_count=cpu_py_count,
cpu_info=cpu_info))
#tools.py
from tools import bytes2human
def get_mem():
return psutil.virtual_memory()
def dis_mem():
mem_info = get_mem()
print("*" * 16,"内存信息","*" * 16)
tpl = "内存总容量:{total} | 内存已使用:{used} | 内存剩余容量:{free}"
print(tpl.format(total=mem_info.total,
used=mem_info.used,
free=mem_info.free))
def get_disk():
return psutil.disk_partitions(all=False)
def dis_disk():
disk_li = get_disk()
for p in disk_li:
disk = psutil.disk_usage(p.mountpoint)
print("分区{}:".format(p.mountpoint))
print("总容量",bytes2human(disk.total))
print("已使用",bytes2human(disk.used))
print("{:>20}".format("-"*15))
print('*'*20)
def dis_net():
#获取网卡的地址信息
net_ip_dic = psutil.net_if_addrs()
#获取网卡的状态信息
net_stat_dic = psutil.net_if_stats()
for net_name,net_info in net_ip_dic.items():
if net_name == 'lo':
continue
net_stat = net_stat_dic[net_name]
print(f"网络 {net_name} 的状态是:{net_stat.isup}")
for addr in net_info:
if addr.family == socket.AF_INET:
print("IPV4",addr.address, f"NETMASK:{addr.netmask}")
elif addr.family == socket.AF_PACKET:
print(f"MAC地址: {addr.address}")
def man():
display_dic = {
"1":{"title":"查看CPU信息","func":dis_cpu},
"2":{"title":"查看Memory信息","func":dis_mem},
"3":{"title":"查看Disk信息","func":dis_disk},
"4":{"title":"查看Network信息","func":dis_net}
}
print("{}Python系统性能信息收集".format('*'*10))
for k,item in display_dic.items():
print(k,item['title'])
while True:
inp = input('请选择>>:')
if inp == 'q':
sys.exit("系统退出")
if inp in display_dic.keys():
print("{}Python 系统性能信息收集程序".format('*'*10))
for k,item in display_dic.items():
print(k,item['title'])
print()
exec_func = display_dic[inp]['func']
exec_func()
print()
if __name__ == "__main__":
man()
网友评论