zoukankan      html  css  js  c++  java
  • 01 psutils模块运用

    python3.6.7安装脚本

    baim0手撸版

    #!/bin/bash
    cd /opt
    yum update -y
    yum -y groupinstall "Development tools" 
    yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel psmisc libffi-devel -y
    
    wget https://www.python.org/ftp/python/3.6.7/Python-3.6.7.tar.xz
    
    tar -xf Python-3.6.7.tar.xz
    
    cd /opt/Python-3.6.7
    
    ./configure --prefix=/usr/local/python3
    
    make && make install
    
    ln -s /usr/local/python3/bin/python3.6 /usr/bin/python3.6.7
    ln -s /usr/local/python3/bin/pip3.6 /usr/bin/pip3.6.7
    
    rm -rf /opt/Python-3.6.7
    rm -rf /opt/Python-3.6.7.tar.xz
    

    psutil模块

    模块简介

    是一个跨平台库,主要获取进程信息、系统利用率信息

    pip3.6.7 install psutil
    

    模块使用

    # 导包
    import psutil
    
    # 使用包的功能
    psutil.virtual_memory()
    
    # 获取内存所有的信息
    [root@docker ~]# python3.6.7 
    Python 3.6.7 (default, Jul  6 2021, 09:37:13) 
    [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import psutil
    >>> psutil.virtual_memory()
    svmem(total=1927176192, available=1161650176, percent=39.7, used=526856192, free=140374016, active=957849600, inactive=559788032, buffers=58167296, cached=1201778688, shared=37826560, slab=150802432)
    

    cpu信息

    通过psutil获取cpu相关的信息

    操作方式

    # 基本信息
    cpu_times()
    
    # cpu核信息
    cpu_count()
    
    # 我们可以为该方法添加 percpu=True获取逻辑cpu信息
    

    简单实践

    import psutil
    
    cpu_info = psutil.cpu_times()
    print("cpu基本信息:{}".format(cpu_info))
    
    cpu_user = cpu_info.user
    print("cpu的用户进程占比:{}".format(cpu_user))
    
    cpu_system = cpu_info.system
    print("cpu的系统进程占比:{}".format(cpu_system))
    
    cpu_iowait = cpu_info.iowait
    print("cpu的io进程占比:{}".format(cpu_iowait))
    
    cpu_count = psutil.cpu_count()
    print("cpu的核信息:{}".format(cpu_count))
    
    cpu_count = psutil.cpu_count(logical=True)
    print("cpu的核逻辑信息:{}".format(cpu_count))
    
    cpu_users = psutil.users()
    print("cpu的所有用户信息:{}".format(cpu_users))
    
    [root@docker ~]# python3.6.7 psutil1.py 
    cpu基本信息:scputimes(user=9982.61, nice=7.97, system=8496.4, idle=1141936.04, iowait=1161.41, irq=0.0, softirq=115.24, steal=0.0, guest=0.0, guest_nice=0.0)
    cpu的用户进程占比:9982.61
    cpu的系统进程占比:8496.4
    cpu的io进程占比:1161.41
    

    内存信息

    通过psutil获取内存相关的信息数据

    实践

    import psutil
    
    # 获取全部内存信息
    mem_info = psutil.virtual_memory()
    print("内存的基本信息:{}".format(mem_info))
    
    # 获取部分内存信息
    mem_total = mem_info.total
    print("内存的总量:{}".format(mem_total))
    
    mem_used = mem_info.used
    print("内存已使用:{}".format(mem_used))
    
    mem_free = mem_info.free
    print("内存总量:{}".format(mem_free))
    
    mem_buffer = mem_info.buffers
    print("内存总量:{}".format(mem_buffer))
    
    mem_swap = psutil.swap_memory()
    print("内存的交换信息:{}".format(mem_swap))
    
    [root@docker ~]# python3.6.7 mem.py 
    内存的基本信息:svmem(total=1927176192, available=1159606272, percent=39.8, used=528900096, free=267259904, active=808960000, inactive=581611520, buffers=65433600, cached=1065582592, shared=37826560, slab=150192128)
    内存的总量:1927176192
    内存已使用:528900096
    内存总量:267259904
    内存总量:65433600
    内存的交换信息:sswap(total=0, used=0, free=0, percent=0.0, sin=0, sout=0)
    

    磁盘信息

    简单实践

    import psutil
    
    disk_info = psutil.disk_partitions()
    print("所有的分区详情:{}".format(disk_info))
    
    # 挂载点信息获取/为例
    disk_root = psutil.disk_usage("/")
    print("根分区详情:{}".format(disk_root))
    
    # 获取根分区的部分信息
    root_total = disk_root.total
    print("根分区挂载内容详情:{}".format(root_total))
    
    root_free = disk_root.free
    print("根分区空余:{}".format(root_free))
    
    root_used = disk_root.used
    print("根分区使用:{}".format(root_used))
    
    root_percent = disk_root.percent
    print("根分区使用占比:{}%".format(root_percent))
    
    # 磁盘io操作相关信息
    disk_io_info = psutil.disk_io_counters()
    print("磁盘io信息:{}%".format(disk_io_info))
    
    # 所有的
    disk_io_info = psutil.disk_io_counters(perdisk=True)
    print("磁盘io信息:{}%".format(disk_io_info))
    
    # 磁盘io操作相关信息
    psutil.disk_io_counters()
    

    网络信息

    获取网络相关的基本数据

    使用方式

    import psutil
    
    # 获取所有信息
    net_info = psutil.net_io_counters()
    print("网卡所有的数据信息:{}".format(net_info))
    
    # 获取部分信息
    # 接收的数据信息
    net_recv = net_info.bytes_recv
    print("网卡接收的数据信息:{}".format(net_recv))
    
    # 发送的数据信息
    net_sent = net_info.bytes_sent
    print("网卡接收的数据信息:{}".format(net_sent))
    
    # 网卡的地址信息
    net_addr = psutil.net_if_addrs()
    print("网卡的地址信息:{}".format(net_addr))
    
    # 网卡的状态信息
    net_stats = psutil.net_if_stats()
    print("网卡的状态信息:{}".format(net_stats))
    
    # 网卡的连接信息
    net_conn = psutil.net_connections()
    print("网卡的连接信息:{}".format(net_conn))
    
    

    其他信息

    获取连接的用户信息,获取启动时间

    实践

    import psutil
    import datetime
    # 获取连接的用户信息
    user_info=psutil.users()
    print("连接的用户信息:{}".format(user_info))
    
    # 获取启动时间
    date_time = psutil.boot_time()
    date_time = datetime.datetime.fromtimestamp(date_time).strftime("%F %T")
    print("系统启动的时间信息:{}".format(date_time))
    
    [root@python python]# python3.6.7 other.py 
    连接的用户信息:[suser(name='root', terminal='pts/0', host='139.226.81.70', started=1625618176.0, pid=1541)]
    系统启动的时间信息:2021-07-07 08:35:27
    

    进程信息

    获得当前系统的进程信息,可以让运维人员得知应用程序的运行状态,包括进程的启动时间,查看或者设置CPU亲和度,内存使用率,io信息,socket连接,线程数,资源利用情况,为开发人员的代码优化问题定位提供很好的数据参考

    import psutil
    
    # 获取进程相关的信息
    process_id_list=psutil.pids()
    print("当前系统所有运行的进程号:{}".format(process_id_list))
    
    # 判断指定的pid是否存在
    pid_num=786
    result = psutil.pid_exists(pid_num)
    print("{}进程状态是否运行{}".format(pid_num,result))
    
    # 获取指定进程的相关信息
    pid_info=psutil.Process(pid_num)
    print("%s进程的详细信息为:%s"%(pid_info.name(),pid_info))
    
    # 进程详细信息的获取方法
    pid_name=pid_info.name()
    print("{} 的进程名称为: {}".format(pid_num,pid_name))
    
    pid_exe=pid_info.exe()
    print("{} 的执行命令为: {}".format(pid_num,pid_exe))
    
    pid_cwd=pid_info.cwd()
    print("{} 的进程工作目录为: {}".format(pid_num,pid_cwd))
    
    pid_status=pid_info.status()
    print("{} 的进程工作状态为: {}".format(pid_num,pid_status))
    

    popen类的使用

    psutil提供的popen类的作用是获取用户启动的应用进程的相关状态

    基础语法

    psutil.Popen(['执行命令','参数','内容'],stdout=信息接收器)
    
    属性
    exec
    shell
    

    实践

    import psutil
    from subprocess import PIPE
    
    # 指定用户执行程序
    my_process=psutil.Popen(["python3.6.7","-c",'print("hello world")'],stdout=PIPE)
    # 用户程序的信息获取
    print("用户进程的名称:{}".format(my_process.name()))
    print("用户进程的启动用户:{}".format(my_process.username()))
    print("用户进程的输出信息:{}".format(my_process.communicate()))
    
    [root@python python]# python3.6.7 process.py 
    用户进程的名称:python3.6.7
    用户进程的启动用户:root
    用户进程的输出信息:(b'hello world
    ', None)
    
  • 相关阅读:
    BZOJ 4260: Codechef REBXOR (trie树维护异或最大值)
    BZOJ 3744 Gty的妹子序列 做法集结
    BZOJ 3289: Mato的文件管理 (区间查询逆序对)
    [JSOI2007]文本生成器
    [TJOI2013]单词
    模板 AC自动机
    POJ 3710 Christmas Game
    HDU 3094 A tree game
    BZOJ 3817 Sum
    BZOJ 4589 Hard Nim
  • 原文地址:https://www.cnblogs.com/zhaokunhao/p/14979995.html
Copyright © 2011-2022 走看看