如何通过Python获取系统基础信息 (psutil模块 os模块 time模块)

一.python中的psutil模块详解

1.psutil模块简介

psutil是一个跨平台库(http://pythonhosted.org/psutil/)能够轻松实现获取系统运行的进程和系统利用率(包括CPU、内存、磁盘、网络等)信息。它主要用来做系统监控,性能分析,进程管理。它实现了同等命令行工具提供的功能,如ps、top、lsofnetstat、ifconfig、who、df、kill、free、nice、ionice、iostat、iotop、uptime、pidof、tty、taskset、pmap等。目前支持32位和64位的Linux、Windows、OS X、FreeBSD和Sun Solaris等操作系统.

2.psutil模块安装

pip3 install psutil -i https://pypi.douban.com/simple

3.运用命令行获取系统基本信息

1.CPU信息

使用cpu_times方法获取cpu的完整信息,如下所示。

>>> psutil.cpu_times()
scputimes(user=650613.02, nice=22.14, system=154916.5, idle=16702285.26, iowait=68894.55, irq=3.38, softirq=7075.65, steal=0.0, guest=0.0)
>>> 

获取单个数据,如用户的cpu时或io等待时间,如下所示:

>>> psutil.cpu_times().user
650617.11
>>> psutil.cpu_times().iowait
68894.63
>>> 

 获取cpu逻辑和物理个数,默认logical值为True 。

#CPU逻辑个数
>>> psutil.cpu_count()
2
#CPU物理个数
>>> psutil.cpu_count(logical=False)
1
>>> 

获取cpu的使用率:

#CPU逻辑个数
>>> psutil.cpu_count()
2
#CPU物理个数
>>> psutil.cpu_count(logical=False)
1
>>> 

2.内存信息

内存信息的获取主要使用virtual_memory方法。swap使用就用swap_memory方法。

>>> mem = psutil.virtual_memory()
>>> mem
svmem(total=4018601984, available=1066205184, percent=73.5, used=3904004096, free=114597888, active=3302174720, inactive=426078208, buffers=156520448, cached=795086848)
>>> mem.total
4018601984
>>> mem.used
3904004096
>>> mem.free
114597888
>>> print(mem.total/1024/1024)
3832.4375
>>> 

其中percent表示实际已经使用的内存占比,即(1047543808-717537280)/1047543808*100% 。available表示还可以使用的内存。

 3.磁盘信息

磁盘信息主要有两部分,一个是磁盘的利用率,一个是io,他们分别可以通过disk_usage和disk_io_counters方法获取。

如下先获取分区信息,然后看下根分区的使用情况:

>>> psutil.disk_partitions()
[sdiskpart(device='/dev/mapper/root', mountpoint='/', fstype='ext4', opts='rw,errors=remount-ro'), sdiskpart(device='/dev/sda1', mountpoint='/boot', fstype='ext2', opts='rw')]
>>> psutil.disk_usage('/')
sdiskusage(total=42273669120, used=17241096192, free=22885195776, percent=40.8)
>>> 

默认disk_io_counters方法获取的是硬盘总的io数和读写信息,如果需要获取单个分区的io和读写信息加上"perdisk=True"参数。

>>> psutil.disk_io_counters()
sdiskio(read_count=638190, write_count=77080153, read_bytes=16037795840, write_bytes=1628871606272, read_time=2307367, write_time=1777841305)
>>> psutil.disk_io_counters(perdisk=True)
{'vdb1': sdiskio(read_count=312, write_count=0, read_bytes=1238016, write_bytes=0, read_time=95, write_time=0), 'vda1': sdiskio(read_count=637878, write_count=77080257, read_bytes=16036557824, write_bytes=1628873314304, read_time=2307272, write_time=1777841879)}
>>> 

4.网络信息:

 网络io和磁盘io使用方法差不多,主要使用net_io_counters方法,如果需要获取单个网卡的io信息,加上pernic=True参数。

#获取网络总的io情况
>>> 
>>> psutil.net_io_counters()
snetio(bytes_sent=525490132009, bytes_recv=409145642892, packets_sent=948527563, packets_recv=778182181, errin=0, errout=0, dropin=0, dropout=0)
#获取网卡的io情况
>>> 
>>> psutil.net_io_counters(pernic=True)
{'lo': snetio(bytes_sent=56524704027, bytes_recv=56524704027, packets_sent=33602236, packets_recv=33602236, errin=0, errout=0, dropin=0, dropout=0), 'eth0': snetio(bytes_sent=468966480940, bytes_recv=352622081327, packets_sent=914930488, packets_recv=744583332, errin=0, errout=0, dropin=0, dropout=0)}
>>> 

5.其他系统信息:

1.获取开机时间

##以linux时间格式返回,可以使用时间戳转换
>>> psutil.boot_time()    
1496647567.0

#转换成自然时间格式
>>> psutil.boot_time()
1496647567.0
>>> datetime.datetime.fromtimestamp(psutil.boot_time ()).strftime("%Y-%m-%d %H: %M: %S")
'2017-06-05 15: 26: 07'
>>> 

2.查看系统全部进程

##以linux时间格式返回,可以使用时间戳转换
>>> psutil.boot_time()    
1496647567.0

#转换成自然时间格式
>>> psutil.boot_time()
1496647567.0
>>> datetime.datetime.fromtimestamp(psutil.boot_time ()).strftime("%Y-%m-%d %H: %M: %S")
'2017-06-05 15: 26: 07'
>>> 

3.查看单个进程

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

= psutil.Process(16031)

p.name()      #进程名

p.exe()         #进程的bin路径

p.cwd()        #进程的工作目录绝对路径

p.status()     #进程状态

p.create_time()  #进程创建时间

p.uids()      #进程uid信息

p.gids()      #进程的gid信息

p.cpu_times()    #进程的cpu时间信息,包括user,system两个cpu信息

p.cpu_affinity()  #get进程cpu亲和度,如果要设置cpu亲和度,将cpu号作为参考就好

p.memory_percent()  #进程内存利用率

p.memory_info()    #进程内存rss,vms信息

p.io_counters()    #进程的IO信息,包括读写IO数字及参数

p.connectios()    #返回进程列表

p.num_threads()  #进程开启的线程数

听过psutil的Popen方法启动应用程序,可以跟踪程序的相关信息

from subprocess import PIPE

= psutil.Popen(["/usr/bin/python""-c""print('hello')"],stdout=PIPE)

p.name()

p.username()

4.用脚本的方式获取系统基本信息

import psutil
#Python中绘制出好看表格的模块
import prettytable
print("物理CPU个数",psutil.cpu_count(logical=False))
print("逻辑CPU个数",psutil.cpu_count())
print(psutil.cpu_percent())
print("*****************内存信息**********************")
memory = psutil.virtual_memory()
print("总内存大小:",memory.total)
print("已使用内存大小:",memory.used)
print("内存使用率:",memory.percent,'%')
print("*****************磁盘信息**********************")
#实例化对象,并通过filed.name属性设置表格的表头信息
pt = prettytable.PrettyTable(field_names=["分区名称","挂载点","文件系统类型" ,"属性","磁盘总容量","磁盘使用百分比(单位:%)"])
parts = psutil.disk_partitions()
for part in parts:
    #print(part.device,part.mountpoint,part.fstype,part.opts)
    usage = psutil.disk_usage(part)
    pt.add_row([part.device,part.mountpoint,part.fstype,part.opts,usage.total,usage.percent])
print(pt)

5.python中时间模块的使用

获取当前时间 获取开机时长

from datetime import date, datetime,timedelta
import time
start_time =datetime(year=2020,month=10,day=10,hour=10,minute=10,second=0)
end_time =datetime(year=2020,month=10,day=11,hour=19,minute=15,second=0)
print(end_time-start_time)

import psutil
#获取系统开机时间
boot_time = psutil.boot_time()
boot_time = datetime.fromtimestamp(boot_time)
#获取当前时间
now_time = datetime.fromtimestamp(time.time())
print(boot_time,now_time)
print("开机时长:",now_time-boot_time)

获取系统信息

"""
主机名:
操作系统:
内核名称:
发行版本号:
内核版本
系统架构
当前时间
开机时间
开机时长
"""
# os模块, operate system, 跟操作系统相关的方法, 多是文件操作等
import os
import  platform
from datetime import  datetime
import  time
try:
    # os.uname在windows系统中不能执行  需要进行异常处理
    system_info = os.uname()
except Exception as e:
    system_info = platform.uname()
#获取系统开机时间 用到psutil timedate time 模块
import psutil
#获取的是开机时间的时间戳
boot_time = psutil.boot_time()
#将开机时间转化为字符串时间
boot_time =  datetime.fromtimestamp(boot_time)
now_time =  datetime.fromtimestamp(time.time())

print("""
***********************************主机信息监控********************************
        主机名: %s
        操作系统: %s
        内核名称: %s
        发行版本号: %s
        内核版本: %s
        系统架构: %s
        当前时间: %s
        开机时间: %s
        开机时长: %s
""" %(system_info.node, system_info.system, system_info.system,
      system_info.release, system_info.version, system_info.machine,
      now_time, boot_time, now_time-boot_time
      ))

猜你喜欢

转载自blog.csdn.net/weixin_43215948/article/details/107584339
今日推荐