python psutil 获取命令历史_使用psutil获取系统信息(第2篇)

用Python来编写脚本简化日常的运维工作是Python的一个重要用途。在Python中可以使用psutil这个第三方模块来获取系统信息。psutil的含义是process and system utilities。利用psutil一两行代码即可快速获取系统信息,从而对系统状态进行监控。另外,psutil可以跨平台使用,支持linux/unix/windows等众多操作系统。psutil项目地址https://pypi.org/project/psutil/

本篇将介绍使用psutil获取系统的网络信息,传感器信息(温度,风扇,电池)和系统其它状态。

1.psutil安装

psutil是第三方包,系统中如果尚未安装可以通过以下命令进行安装。# 查看是否安装psutil$ pip list# 如果没有安装,通过以下命令进行安装$ pip install psutil

安装完成后可访问psutil的官方文档查看所有API的详细用法。psutil文档(英文)https://psutil.readthedocs.io/en/latest/

2. 示例代码获取代码https://github.com/littlegogo/psutil_study

3.使用psutil获取系统网络信息

使用psutil能够获取系统的网络状况信息,主要包括:网络的I/O信息,网络连接信息,网络地址信息和网卡状态信息。具体用法和说明如下:import psutilif __name__ == "__main__":"""查看网络I./O统计信息 psutil.net_io_counters(pernic=False, nowrap=True)返回系统级别的网络I/O统计信息字段含义:bytes_sent - 发送字节数bytes_recv - 接收字节数packets_sent - 发送packet数量packets_recv - 接收packet数量errin - 接收错误数errout - 发送错误数dropin - 接收丢包数dropout - 发送丢包数(在 macOS 和 BSD上总是0)pernic =True 以词典形式返回每个网卡的上述信息,网卡的名称作为key在Linux,网络非常繁忙或者运行时间很长的系统中,返回的数值可能发生溢出或wrap(数值从0重新开始计数)如果指定nowrap=True, psutil 将会在每次函数调用时进行检测和调整,将旧的值与新的值相加或保持不变,从而不会减少 使用net_io_counters.cache_clear()方法可以清除nowrap的缓存值.在没有网络接口(网卡)的机器上,如果指定pernic=True,函数将返回None or {}"""print("网络I/O信息(pernic=False):", psutil.net_io_counters())print()print("网络I/O信息(pernic=True):", psutil.net_io_counters(pernic=True))print()"""查看网络连接情况psutil.net_connections(kind="inet")返回系统的socket连接信息字段含义:fd - socket描述符(在windows和SunOS上为-1)family - 地址族AF_INET, AF_INET6或AF_UNIXtype - 地址类型SOCK_STREAM, SOCK_DGRAM orSOCK_SEQPACKETladdr - 本地地址(ip,port)或AF _UNIX路径raddr - 远端地址(ip,port)或UNIX sockets绝对路径 ,当远端未连接时,(返回FA_INET*) 或AF_UNIXsatus - TCP连接状态 psutil.CONN_*形式的字符串常量。对于UDP和Unix sosket,这个值始终为psutil.CONN_NONEpid-开启socket的进程的进程ID(pid)在一些平台上(如linux),该字段是否可用与进程的权限有关(通常来说需要root权限)函数中的kind参数取值为字符串,可以设置的内容及说明如下:Kind value Connections using"inet" IPv4 and IPv6"inet4" IPv4"inet6" IPv6"tcp" TCP"tcp4" TCP over IPv4"tcp6" TCP over IPv6"udp" UDP"udp4" UDP over IPv4"udp6" UDP over IPv6"unix" UNIX socket (both UDP and TCP protocols)"all" the sum of all the possible families and protocols注意:在macOS和AIX系统上,这个函数需要系统权限,为了得到每个进程的网络连接情况可以使用Process.connections()函数在macOS和AIX系统上,如果不是用root运行,将会触发psutil.AccessDenied异常。在Solaris,UNIX sockets不被支持在Linux, FreeBSD系统上针对UNIX socket,“raddr”字段将被设置为”This is a limitation of the OS.”在OpenBSD系统上针对UNIX socket“laddr” 和“raddr” 字段 将被设置为”This is a limitation of the OS.”"""print("网络连接信息:", psutil.net_connections())print()"""查看网卡状态psutil.net_if_stats()返回每块网卡的状态信息字段含义:isup - 网卡是否启动并运行duplex - NIC_DUPLEX_FULL(全双工) NIC_DUPLEX_HALF(半双工) NIC_DUPLEX_UNKNOWN(未知)speed - 网络速度(MB),如果不能获取则被设置为0mtu - 以bytes表示的最大传输单元"""print("网卡状态:", psutil.net_if_stats())

运行结果如下

4.查看传感器信息

使用psutil能够获取系统的传感器信息,主要包括:温度传感器信息,风扇转速,电池电量等信息。具体用法和说明如下:import psutilif __name__ == "__main__":"""查看温度传感器信息psutil.sensors_temperatures(fahrenheit=False)返回硬件的温度传感器信息(可能是CPU,disk等,与操作系统有关)fahrenheit=False表示数值单位为:摄氏度fahrenheit=True 表示数值单位为:华氏度如果传感器不被支持,返回空的字典在Linux和FreeBSD系统可用"""print("传感器温度信息:", psutil.sensors_temperatures())print()"""查看风扇转速psutil.sensors_fans()转速单位:RPM支持Linux和macOS系统"""print("风扇转速:",psutil.sensors_fans())print()"""查看系统电池信息psutil.sensors_battery()返回电池的状态信息,如果没有电池返回None字段含义:percent - 剩余电量secsleft - 电量剩余秒数,如果接通电源,被设置为psutil.POWER_TIME_UNLIMITED,如果不能确定则被设置为psutil.POWER_TIME_UNKNOWNpower_plugged - 是否连接电源适配器,如果不能确定则返回None支持系统:Linux Windows FreeBSD"""print("电池信息:", psutil.sensors_battery())

由于笔者的Linux系统在虚拟机中,上述信息均返回默认无效值。

5.获取其它系统信息

使用psutil能够获取系统的其它信息主要包括:启动时间,用户信息。具体用法和说明如下:import psutilimport datetimeif __name__ == "__main__":"""查看系统的启动时间psutil.boot_time()返回系统的启动时间,UINX时间戳"""print("系统启动时间:", datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d %H:%M:%S"))print()"""查看系统用户信息psutil.users()返回当前已经连接到系统的用户列表字段含义:user - 用户名terminal - 终端host - 主机名started - 起始时间(unix 时间戳,秒)pid - 登录进程(sshd,tmux,gdm-session-worker)的进程ID,在Windows和OpenBSD系统上,该字段被设置为None"""print("用户信息:",psutil.users())print()

运行结果如下

(完)

psutil往期回顾查看cpu,内存和磁盘信息——使用psutil获取系统信息(第一篇)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值