信息基础信息模块psutil

psutil简介

psutil是一个开源且跨平台(http://code.google.com/p/psutil/)的库,能够轻松实现**获取系统运行的进程和系统利用率(包括CPU、内存、磁盘、网络等)信息。它主要应用于系统监控,分析和限制系统资源及进程的管理。它实现了同等命令行工具提供的功能,如ps、top、lsof、netstat、ifconfig、who、df、kill、free、nice、ionice、iostat、iotop、uptime、pidof、tty、taskset、pmap等。

在Python中获取系统信息的另一个好办法是使用psutil这个第三方模块。还可以跨平台使用,支持Linux/UNIX/OSX/Windows等,是系统管理员和运维小伙伴不可或缺的必备模块。

安装psutil模块

  1. CentOS安装psutil模块:
wget https://pypi.python.org/packages/source/p/psutil/psutil-5.8.0.tar.gz
tar zxvf psutil-5.8.0.tar.gz  
cd psutil-5.8.0
yum -y install python-devel 
  1. pip 安装
pip3 install psutils

使用psutil模块

  1. 方法
python3
import psutil
>>> psutil.
Display all 111 possibilities? (y or n)
psutil.AF_LINK                psutil.MACOS                  psutil.RLIMIT_MSGQUEUE        psutil.TimeoutExpired(        psutil.os
psutil.AIX                    psutil.NETBSD                 psutil.RLIMIT_NICE            psutil.WINDOWS                psutil.pid_exists(
psutil.AccessDenied(          psutil.NIC_DUPLEX_FULL        psutil.RLIMIT_NOFILE          psutil.ZombieProcess(         psutil.pids(
psutil.BSD                    psutil.NIC_DUPLEX_HALF        psutil.RLIMIT_NPROC           psutil.boot_time(             psutil.process_iter(
psutil.CONN_CLOSE             psutil.NIC_DUPLEX_UNKNOWN     psutil.RLIMIT_RSS             psutil.collections            psutil.pwd
psutil.CONN_CLOSE_WAIT        psutil.NoSuchProcess(         psutil.RLIMIT_RTPRIO          psutil.contextlib             psutil.sensors_battery(
psutil.CONN_CLOSING           psutil.OPENBSD                psutil.RLIMIT_RTTIME          psutil.cpu_count(             psutil.sensors_fans(
psutil.CONN_ESTABLISHED       psutil.OSX                    psutil.RLIMIT_SIGPENDING      psutil.cpu_freq(              psutil.sensors_temperatures(
psutil.CONN_FIN_WAIT1         psutil.POSIX                  psutil.RLIMIT_STACK           psutil.cpu_percent(           psutil.signal
psutil.CONN_FIN_WAIT2         psutil.POWER_TIME_UNKNOWN     psutil.RLIM_INFINITY          psutil.cpu_stats(             psutil.subprocess
psutil.CONN_LAST_ACK          psutil.POWER_TIME_UNLIMITED   psutil.STATUS_DEAD            psutil.cpu_times(             psutil.swap_memory(
psutil.CONN_LISTEN            psutil.PROCFS_PATH            psutil.STATUS_DISK_SLEEP      psutil.cpu_times_percent(     psutil.sys
psutil.CONN_NONE              psutil.PermissionError(       psutil.STATUS_IDLE            psutil.datetime               psutil.test(
psutil.CONN_SYN_RECV          psutil.Popen(                 psutil.STATUS_LOCKED          psutil.disk_io_counters(      psutil.threading
psutil.CONN_SYN_SENT          psutil.Process(               psutil.STATUS_PARKED          psutil.disk_partitions(       psutil.time
psutil.CONN_TIME_WAIT         psutil.ProcessLookupError(    psutil.STATUS_RUNNING         psutil.disk_usage(            psutil.users(
psutil.Error(                 psutil.RLIMIT_AS              psutil.STATUS_SLEEPING        psutil.functools              psutil.version_info
psutil.FREEBSD                psutil.RLIMIT_CORE            psutil.STATUS_STOPPED         psutil.getloadavg(            psutil.virtual_memory(
psutil.IOPRIO_CLASS_BE        psutil.RLIMIT_CPU             psutil.STATUS_TRACING_STOP    psutil.long(                  psutil.wait_procs(
psutil.IOPRIO_CLASS_IDLE      psutil.RLIMIT_DATA            psutil.STATUS_WAITING         psutil.net_connections(       
psutil.IOPRIO_CLASS_NONE      psutil.RLIMIT_FSIZE           psutil.STATUS_WAKING          psutil.net_if_addrs(          
psutil.IOPRIO_CLASS_RT        psutil.RLIMIT_LOCKS           psutil.STATUS_ZOMBIE          psutil.net_if_stats(          
psutil.LINUX                  psutil.RLIMIT_MEMLOCK         psutil.SUNOS      

2. 获取系统性能信息

  1. cpu 信息
    Linux操作系统的CPU利用率有以下几个部分:
    User Time,执行用户进程的时间百分比;
    System Time,执行内核进程和中断的时间百分比;
    Wait IO,由于IO等待而使CPU处于idle(空闲)状态的时间百分比;
    IdleCPU处于idle状态的时间百分比。
import psutil
# cpu
cpu1 = psutil.cpu_times()
cpu_count = psutil.cpu_count(logical=False) # 物理个数
cpu_count1 = psutil.cpu_count()             # 逻辑个数

print(cpu1)
print(cpu1.user)
print(cpu_count)
print(cpu_count1)

在这里插入图片描述

  1. 内存信息
impore psutil
mem = psutil.virtual_memory()		# 使用该方法获取内存完整信息
mem.total												# 获取内存总数
mem.user												# 获取内存使用数
mem.free												# 获取内存空闲数
psutil.swap_memory()						# 获取swap分区信息
# 内存
mem = psutil.virtual_memory()
print(mem)
print(f"{str(mem.used/1024/1024)}M")
print(mem.total/1024/1024)
print(mem.available)
print(mem.free)
print(mem.percent)
mem1 = psutil.swap_memory()
print(f"{str(mem1.used/1024/1024)}M")

在这里插入图片描述

  1. 磁盘信息
    相当于Linux上的 iostat -xd 或者 cat /proc/diskstats
impore psutil
psutil.disk_partitions()				# 使用该方法获取磁盘完整信息
psutil.disk_usage('/')					# 获取分区的使用情况
psutil.disk_io_counters()				# 获取磁盘总的IO个数,读写信息
psutil.disk_io_counters(perdisk=True)				# 使用参数获取单个分区IO个数,读写信息
# 磁盘
disk = psutil.disk_partitions()

print(disk)
disk1 =psutil.disk_usage('/')
disk_io = psutil.disk_io_counters()
print(disk1)
print(disk1.total)
print(disk_io)
print(disk_io.read_count)
print(disk_io.write_time)
disk_io1 = psutil.disk_io_counters(perdisk=True)	# 字典
print(disk_io1)
for disk, stats in disk_io1.items():
    print(f"Disk: {disk}, Stats: {stats}")

在这里插入图片描述

  1. 网络信息
impore psutil
psutil.net_io_counters()				# 使用该方法获取网络IO信息,默认pernic=False

>>> psutil.net_
psutil.net_connections(  psutil.net_if_addrs(     psutil.net_if_stats(     psutil.net_io_counters(  
>>> psutil.net_io_counters()
snetio(bytes_sent=418313771480, bytes_recv=436745618703, packets_sent=2126415883, packets_recv=2229231102, errin=0, errout=0, dropin=4233, dropout=0)
>>> 
# 网络
net = psutil.net_io_counters()              #输出网络总的IO信息,默认pernic=False
print(net)
print(net.bytes_recv)
print(net.bytes_sent)

net1 = psutil.net_io_counters(pernic=True)  #输出每个网络接口总的IO信息 
print(net1)
for net, stats in net1.items():
    print(f"Net: {net}, Stats: {stats}")

在这里插入图片描述

  1. 其他系统信息
    还可以获取用户登录、开机时间等信息
impore psutil
psutil.users()				# 使用该方法返回当前登录系统的用户信息
import datetime
psutil.boot_time()		# 使用该方法获取开机时间,以linux时间戳返回
datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d-%H:%M:%S")	#转换格式为自然格式

>>> psutil.users()
[suser(name='root', terminal='tty1', host='', started=1693208576.0, pid=1411), suser(name='kduser', terminal='pts/0', host='172.20.199.78', started=1698386816.0, pid=17560), suser(name='kduser', terminal='pts/1', host='172.20.199.78', started=1698387712.0, pid=17560)]
>>> import datetime
>>> psutil.boot_time()
1665647519.0
>>> datetime.datetime.
datetime.datetime.astimezone(        datetime.datetime.isocalendar(       datetime.datetime.replace(           datetime.datetime.toordinal(
datetime.datetime.combine(           datetime.datetime.isoformat(         datetime.datetime.resolution         datetime.datetime.tzinfo
datetime.datetime.ctime(             datetime.datetime.isoweekday(        datetime.datetime.second             datetime.datetime.tzname(
datetime.datetime.date(              datetime.datetime.max                datetime.datetime.strftime(          datetime.datetime.utcfromtimestamp(
datetime.datetime.day                datetime.datetime.microsecond        datetime.datetime.strptime(          datetime.datetime.utcnow(
datetime.datetime.dst(               datetime.datetime.min                datetime.datetime.time(              datetime.datetime.utcoffset(
datetime.datetime.fold               datetime.datetime.minute             datetime.datetime.timestamp(         datetime.datetime.utctimetuple(
datetime.datetime.fromordinal(       datetime.datetime.month              datetime.datetime.timetuple(         datetime.datetime.weekday(
datetime.datetime.fromtimestamp(     datetime.datetime.mro(               datetime.datetime.timetz(            datetime.datetime.year
datetime.datetime.hour               datetime.datetime.now(               datetime.datetime.today(             
>>> datetime.datetime.fromtimestamp(psutil.boot_time())
datetime.datetime(2022, 10, 13, 15, 51, 59)
>>> datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d %H:%M:%S")
'2022-10-13 15:51:59'
user = psutil.users()
print(user)
boot_time = psutil.boot_time()
print(boot_time/60/60/60/60)

系统进程管理方法

  1. 进程信息
impore psutil
psutil.pids()							# 列出所有进程PID
P = psutil.Process(2000) 	# 实例化一个process对象,参数为一进程PID 
p.name()									# 进程名
p.exe()										# 进程bin路径
p.cwd()										# 进程工作目录绝对路径
p.status()								# 进程状态
p.create_time()						# 进程创建时间,时间戳格式
p.uids()									# 进程uid信息
p.gids()									# 进程gid信息
p.cpu_time()			  			# 进程CPU时间信息,包括user,system两个时间
p.memory_info()						# 进程内存 rss\vms 信息
p.memory_percent()				# 进程内存利用率
p.io_counters()						# 进程IO信息,包括读写IO数等
p.connections()						# 返回打开进程socket的列表
p.num_threads()						# 进程开启的线程数


>>> p=psutil.Process(30687)     
>>> p.
p.as_dict(           p.is_running(        p.parents(
p.children(          p.kill(              p.pid
p.cmdline(           p.memory_full_info(  p.ppid(
p.connections(       p.memory_info(       p.resume(
p.cpu_affinity(      p.memory_info_ex(    p.rlimit(
p.cpu_num(           p.memory_maps(       p.send_signal(
p.cpu_percent(       p.memory_percent(    p.status(
p.cpu_times(         p.name(              p.suspend(
p.create_time(       p.nice(              p.terminal(
p.cwd(               p.num_ctx_switches(  p.terminate(
p.environ(           p.num_fds(           p.threads(
p.exe(               p.num_threads(       p.uids(
p.gids(              p.oneshot(           p.username(
p.io_counters(       p.open_files(        p.wait(
p.ionice(            p.parent(            
>>> p.exe()
'/usr/bin/python3.6'
>>> p.cwd()
'/'
>>> p.pid
30687
>>> p.ppid()
25480
>>> p.name()
'salt-master'
>>> p.environ()
{'LANG': 'en_US.UTF-8', 'PATH': '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin', 'NOTIFY_SOCKET': '/run/systemd/notify'}
# 进程信息
pid = psutil.pids()
print(pid)
p = psutil.Process(48455)
print(p.name())
print(p.ppid)
print(p.children())
print(p.memory_info())
print(p.memory_info())
print(p.cwd())
print(p.status())
print(p.create_time())
print(p.exe())
print(p.uids())
print(p.cpu_percent())
print(p.cpu_times())
print(p.io_counters())
print(p.connections())

在这里插入图片描述

  1. popen 类的使用
    获取用户应用进程相关的信息数据
    基本语法:
    psutil.Popen([‘执行命令’, ’ 参数’ ,‘内容’], stdout=接收器)
    属性解析:
    exec 模式: [‘执行命令’, ’ 参数’ ,‘内容’]
    shell 模式:执行命令,参数,内容
    subprocess.PIPE :一个可以被用于Popen的stdin 、stdout 和stderr 3个参数的特输值,表示需要创建一个新的管道。
impore psutil
from subpricess import PIPE	
#通过 psutil 的 Popen方法启动的应用程序,可以跟踪该程序运行的所有相关信息
p= psutil.Popen(["/usr/bin/python", "-c", "print('hello')"],stdout=PIPE)
p.name()				# python
p.username()			# "root"
p.communicate()			# ('hello\n',None)
p.cpu_time()			# 得到进程运行的CPU时间,

>>> from subprocess import PIPE
>>> p= psutil.Popen(["/usr/bin/python3.6","-c", "print('hello')"],stdout=PIPE)
>>> p.name()
'python3.6'
>>> p.
p.as_dict(           p.is_running(        p.pid
p.children(          p.kill(              p.poll(
p.cmdline(           p.memory_full_info(  p.ppid(
p.communicate(       p.memory_info(       p.resume(
p.connections(       p.memory_info_ex(    p.rlimit(
p.cpu_affinity(      p.memory_maps(       p.send_signal(
p.cpu_num(           p.memory_percent(    p.status(
p.cpu_percent(       p.name(              p.suspend(
p.cpu_times(         p.nice(              p.terminal(
p.create_time(       p.num_ctx_switches(  p.terminate(
p.cwd(               p.num_fds(           p.threads(
p.environ(           p.num_threads(       p.uids(
p.exe(               p.oneshot(           p.username(
p.gids(              p.open_files(        p.wait(
p.io_counters(       p.parent(            
p.ionice(            p.parents(           
>>> p.username()
'root'
>>> p.communicate()
(b'hello\n', None)
  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值