zoukankan      html  css  js  c++  java
  • Python psutil模块

    用Python来编写脚本简化日常的运维工作是Python的一个重要用途。在Linux下,有许多系统命令可以让我们时刻监控系统运行的状态,如ps,top,free等等。要获取这些系统信息,Python可以通过subprocess模块调用并获取结果。但这样做显得很麻烦,尤其是要写很多解析代码。

    在Python中获取系统信息的另一个好办法是使用psutil这个第三方模块。顾名思义,psutil = process and system utilities,它不仅可以通过一两行代码实现系统监控,还可以跨平台使用,支持Linux/UNIX/OSX/Windows等,是系统管理员和运维小伙伴不可或缺的必备模块。

    安装psutil

    如果安装了Anaconda,psutil就已经可用了。否则,需要在命令行下通过pip安装:

    pip install psutil
    

    如果遇到Permission denied安装失败,请加上sudo重试。

    获取CPU信息

    import psutil
    psutil.cpu_count() # CPU逻辑数量
    psutil.cpu_count(logical=False) # CPU物理核心
    # 2说明是双核超线程, 4则是4核非超线程
    

    统计CPU的用户/系统/空闲时间:

    import psutil
    psutil.cpu_times()
    

    再实现类似top命令的CPU使用率,每秒刷新一次,累计10次:

    for x in range(10):
        psutil.cpu_percent(interval=1, percpu=True)
    

    获取内存信息

    使用psutil获取物理内存和交换内存信息,分别使用:

    psutil.virtual_memory()
    psutil.swap_memory()
    

    返回的是字节为单位的整数,可以看到,总内存大小是8589934592 = 8 GB,已用7201386496 = 6.7 GB,使用了66.6%。

    获取磁盘信息

    以通过psutil获取磁盘分区、磁盘使用率和磁盘IO信息:

    psutil.disk_partitions() # 磁盘分区信息
    psutil.disk_usage('/') # 磁盘使用情况
    psutil.disk_io_counters() # 磁盘IO
    

    可以看到,磁盘'/'的总容量是998982549504 = 930 GB,使用了39.1%。文件格式是HFS,opts中包含rw表示可读写,journaled表示支持日志。

    获取网络信息

    psutil可以获取网络接口和网络连接信息:

    psutil.net_io_counters() # 获取网络读写字节/包的个数
    psutil.net_if_addrs() # 获取网络接口信息
    psutil.net_if_stats() # 获取网络接口状态
    

    要获取当前网络连接信息,使用net_connections():

    psutil.net_connections()
    

    你可能会得到一个AccessDenied错误,原因是psutil获取信息也是要走系统接口,而获取网络连接信息需要root权限,这种情况下,可以退出Python交互环境,用sudo重新启动:

    #sudo python3
    import psutil
    psutil.net_connections()
    

    获取进程信息

    通过psutil可以获取到所有进程的详细信息:

    psutil.pids() # 所有进程ID
    p = psutil.Process(3776) # 获取指定进程ID=3776,其实就是当前Python交互环境
    

    和获取网络连接类似,获取一个root用户的进程需要root权限,启动Python交互环境或者.py文件时,需要sudo权限。

    psutil还提供了一个test()函数,可以模拟出ps命令的效果:

    $ sudo python3
    Password: ******
    Python 3.6.3 ... on darwin
    Type "help", ... for more information.
    >>> import psutil
    >>> psutil.test()
    USER         PID %MEM     VSZ     RSS TTY           START    TIME  COMMAND
    root           0 24.0 74270628 2016380 ?             Nov18   40:51  kernel_task
    root           1  0.1 2494140    9484 ?             Nov18   01:39  launchd
    root          44  0.4 2519872   36404 ?             Nov18   02:02  UserEventAgent
    root          45    ? 2474032    1516 ?             Nov18   00:14  syslogd
    root          47  0.1 2504768    8912 ?             Nov18   00:03  kextd
    root          48  0.1 2505544    4720 ?             Nov18   00:19  fseventsd
    _appleeven    52  0.1 2499748    5024 ?             Nov18   00:00  appleeventsd
    root          53  0.1 2500592    6132 ?             Nov18   00:02  configd
    ...
    
  • 相关阅读:
    POJ 1887 Testing the CATCHER
    HDU 3374 String Problem
    HDU 2609 How many
    POJ 1509 Glass Beads
    POJ 1458 Common Subsequence
    POJ 1159 Palindrome
    POJ 1056 IMMEDIATE DECODABILITY
    POJ 3080 Blue Jeans
    POJ 1200 Crazy Search
    软件体系结构的艺术阅读笔记1
  • 原文地址:https://www.cnblogs.com/meilong/p/Python-psutil-mo-kuai.html
Copyright © 2011-2022 走看看