美文网首页
psutil模块

psutil模块

作者: 凤凤思密达萌萌哒 | 来源:发表于2020-01-07 20:07 被阅读0次

一、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()

相关文章

网友评论

      本文标题:psutil模块

      本文链接:https://www.haomeiwen.com/subject/fgcractx.html