一、模块安装

1、简介

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

2、安装

CentOS安装psutil包:
python版本:3.5 wget https://pypi.python.org/packages/source/p/psutil/psutil-3.2.1.tar.gz --no-check-certificate
tar zxvf psutil-3.2.1.tar.gz
cd psutil-3.2.1
python setup.py install Windows安装:
pip3.exe install psutil

二、获取系统基本信息的使用

1、CPU

使用cpu_times方法获取cpu的完整信息,如下所示:
>>> import psutil
>>> psutil.cpu_times()
scputimes(user=26712.69, nice=6.59, system=16096.79, idle=23242025.75, iowait=37.75, irq=0.0, softirq=568.43, steal=0.0, guest=0.0, guest_nice=0.0) 获取单个数据,如用户的cpu时或io等待时间,如下所示:
>>> psutil.cpu_times().user
26712.98 >>> psutil.cpu_times().iowait
37.75 获取cpu逻辑和物理个数,默认logical值为True:
#CPU逻辑个数
>>> psutil.cpu_count()
6 #CPU物理个数
>>> psutil.cpu_count(logical=False)
2 获取cpu的使用率:
>>> psutil.cpu_percent()
0.2 >>> psutil.cpu_percent(1)
0.0

2、内存信息

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

>>> MEM = psutil.virtual_memory()
>>> MEM
svmem(total=4136796160L, available=3620245504L, percent=12.5, used=1297555456L, free=2839240704L, active=627490816, inactive=404381696, buffers=974848L, cached=780029952) >>> MEM.total
4136796160L >>> MEM.used
1297555456L >>> MEM.free
2839240704L #也可以格式化一下单位
>>> print(MEM.free/1024/1024)
2707 其中percent表示实际已经使用的内存占比。available表示还可以使用的内存。

3、磁盘信息

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

如下先获取分区信息,然后看下根分区的使用情况:
>>> psutil.disk_partitions()
[sdiskpart(device='/dev/mapper/centos-root', mountpoint='/', fstype='xfs', opts='rw,relatime,attr2,inode64,noquota'), sdiskpart(device='/dev/sda1', mountpoint='/boot', fstype='xfs', opts='rw,relatime,attr2,inode64,noquota')] >>> psutil.disk_usage('/')
sdiskusage(total=304470978560, used=46186463232, free=258284515328, percent=15.2) 默认disk_io_counters方法获取的是硬盘总的io数和读写信息,如果需要获取单个分区的io和读写信息加上"perdisk=True"参数。 >>> psutil.disk_io_counters()
sdiskio(read_count=22311, write_count=2684382, read_bytes=871543808, write_bytes=24955394048, read_time=133691, write_time=41573396) >>> psutil.disk_io_counters(perdisk=True)
{'fd0': sdiskio(read_count=1, write_count=0, read_bytes=4096, write_bytes=0, read_time=64, write_time=0), 'sr0': sdiskio(read_count=11, write_count=0, read_bytes=45056, write_bytes=0,
read_time=79, write_time=0),
'sda2': sdiskio(read_count=10925, write_count=1253459, read_bytes=424309760, write_bytes=12476611584, read_time=63902, write_time=18987876), 'sda1': sdiskio(read_count=297,
write_count=2073, read_bytes=23391232, write_bytes=2179072, read_time=617, write_time=354), 'dm-0': sdiskio(read_count=10948, write_count=1428852, read_bytes=422695936,
write_bytes=12476611584, read_time=68948, write_time=22585166), 'dm-1': sdiskio(read_count=129, write_count=0, read_bytes=1097728, write_bytes=0, read_time=81, write_time=0)}


4、网络信息

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

#获取网络总的io情况
>>> psutil.net_io_counters()
snetio(bytes_sent=3297791475, bytes_recv=1389796856, packets_sent=8756507, packets_recv=16250143, errin=0, errout=0, dropin=776532, dropout=0) #获取网卡的io情况
>>> psutil.net_io_counters(pernic=True)
{'lo': snetio(bytes_sent=4706567, bytes_recv=4706567, packets_sent=71051, packets_recv=71051, errin=0, errout=0, dropin=0, dropout=0), 'ens192': snetio(bytes_sent=3293097784,
bytes_recv=1385095182, packets_sent=8685489, packets_recv=16179153, errin=0, errout=0, dropin=776535, dropout=0)}

5、其他系统信息

1.获取开机时间
#以linux时间格式返回,可以使用时间戳转换
>>> psutil.boot_time()
1560134542.0 >>> import datetime
>>> datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d %H: %M: %S")
'2019-06-10 10: 42: 22' 2.查看系统全部进程
>>> psutil.pids()
[1, 2, 3, 4, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 32, 33, 34, 35, 36, 38, 39, 40, 41, 42, 44, 45, 46, 47, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
61, 62, 65, 115, 118, 119, 120, 121, 122, 123, 125, 138, 361, 362, 363, 364, 365, 366, 367, 368, 370, 371, 453, 462, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 562, 582,
590, 678, 698, 699, 700, 701, 702, 703, 704, 705, 729, 747, 748, 752, 753, 759, 763, 767, 769, 788, 827, 828, 866, 1001, 1003, 1009, 1010, 1011, 1025, 1116, 1124, 1125, 1126, 1127,
1128, 1409, 1411, 1459, 2221, 2329, 2330, 2331, 2332, 2334, 2335, 2337, 2338, 2339, 2340, 2920, 2967, 3043, 4002, 4255, 4257, 4283, 4284, 4300, 4547, 4677, 5304, 5307, 5871,
6189, 6252, 6529, 6559, 6560, 6588, 10618, 10622, 10629, 10631, 20556, 21194, 24406, 25219, 28097] 3.查看单个进程
p = psutil.Process(10631) 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
p = psutil.Popen(["/usr/bin/python", "-c", "print('hello')"],stdout=PIPE)
p.name()
p.username()

6、 查看系统硬件脚本

#!/usr/bin/env python
#coding:utf-8 import psutil
import datetime
import time # 当前时间
now_time = time.strftime('%Y-%m-%d-%H:%M:%S', time.localtime(time.time()))
print(now_time) # 查看cpu物理个数的信息
print(u"物理CPU个数: %s" % psutil.cpu_count(logical=False)) #CPU的使用率
cpu = (str(psutil.cpu_percent(1))) + '%'
print(u"cup使用率: %s" % cpu) #查看内存信息,剩余内存.free 总共.total
#round()函数方法为返回浮点数x的四舍五入值。 free = str(round(psutil.virtual_memory().free / (1024.0 * 1024.0 * 1024.0), 2))
total = str(round(psutil.virtual_memory().total / (1024.0 * 1024.0 * 1024.0), 2))
memory = int(psutil.virtual_memory().total - psutil.virtual_memory().free) / float(psutil.virtual_memory().total)
print(u"物理内存: %s G" % total)
print(u"剩余物理内存: %s G" % free)
print(u"物理内存使用率: %s %%" % int(memory * 100))
# 系统启动时间
print(u"系统启动时间: %s" % datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d %H:%M:%S")) # 系统用户
users_count = len(psutil.users())
#
# >>> for u in psutil.users():
# ... print(u)
# ...
# suser(name='root', terminal='pts/0', host='61.135.18.162', started=1505483904.0)
# suser(name='root', terminal='pts/5', host='61.135.18.162', started=1505469056.0)
# >>> u.name
# 'root'
# >>> u.terminal
# 'pts/5'
# >>> u.host
# '61.135.18.162'
# >>> u.started
# 1505469056.0
# >>> users_list = ",".join([u.name for u in psutil.users()])
print(u"当前有%s个用户,分别是 %s" % (users_count, users_list)) #网卡,可以得到网卡属性,连接数,当前流量等信息
net = psutil.net_io_counters()
bytes_sent = '{0:.2f} Mb'.format(net.bytes_recv / 1024 / 1024)
bytes_rcvd = '{0:.2f} Mb'.format(net.bytes_sent / 1024 / 1024)
print(u"网卡接收流量 %s 网卡发送流量 %s" % (bytes_rcvd, bytes_sent)) io = psutil.disk_partitions()
# print(io)
# print("io[-1]为",io[-1])
#del io[-1] print('-----------------------------磁盘信息---------------------------------------') print("系统磁盘信息:" + str(io)) for i in io:
o = psutil.disk_usage(i.device)
print("总容量:" + str(int(o.total / (1024.0 * 1024.0 * 1024.0))) + "G")
print("已用容量:" + str(int(o.used / (1024.0 * 1024.0 * 1024.0))) + "G")
print("可用容量:" + str(int(o.free / (1024.0 * 1024.0 * 1024.0))) + "G") print('-----------------------------进程信息-------------------------------------')
# 查看系统全部进程
for pnum in psutil.pids():
p = psutil.Process(pnum)
print(u"进程名 %-20s 内存利用率 %-18s 进程状态 %-10s 创建时间 %-10s " \
% (p.name(), p.memory_percent(), p.status(), p.create_time()))

python模块之psutil的更多相关文章

  1. python模块之psutil详解

    一.psutil模块: 1.psutil是一个跨平台库(http://pythonhosted.org/psutil/)能够轻松实现获取系统运行的进程和系统利用率(包括CPU.内存.磁盘.网络等)信息 ...

  2. Python模块学习 - psutil

    psutil模块介绍 psutil是一个开源切跨平台的库,其提供了便利的函数用来获取才做系统的信息,比如CPU,内存,磁盘,网络等.此外,psutil还可以用来进行进程管理,包括判断进程是否存在.获取 ...

  3. 【目录】Python模块学习系列

    目录:Python模块学习笔记 1.Python模块学习 - Paramiko  - 主机管理 2.Python模块学习 - Fileinput - 读取文件 3.Python模块学习 - Confi ...

  4. 15.python笔记之psutil模块

    一.psutil模块 1. psutil是一个跨平台库(http://code.google.com/p/psutil/),能够轻松实现获取系统运行的进程和系统利用率(包括CPU.内存.磁盘.网络等) ...

  5. python基础之psutil模块和发邮件(smtplib和yagmail)

    除了内建的模块外,Python还有大量的第三方模块. 基本上,所有的第三方模块都会在PyPI - the Python Package Index上注册,只要找到对应的模块名字,即可用pip安装. 此 ...

  6. Python监控服务器利器--psutil

    Python监控服务器利器--psutil 服务器的监控通过安装一些常用的监控软件之外,有时也需要运行一些shell或Python脚本:shell下可以使用系统自带的ps/free/top/df等sh ...

  7. python模块大全

    python模块大全2018年01月25日 13:38:55 mcj1314bb 阅读数:3049 pymatgen multidict yarl regex gvar tifffile jupyte ...

  8. python获取系统信息psutil

    python获取系统信息psutil:psutil获取系统cpu使用率的方法是cpu_percent(),其有两个参数,分别是interval和percpu,interval指定的是计算cpu使用率的 ...

  9. 离线方式快速安装python模块以及相关依赖模块

    一般公司的服务器都是和外网隔离的,这个如果没有内部pip源的话,想要安装python的模块就需要去python官网一个一个下载依赖模块的包,然后逐个安装,这样做非常耗时间. 我们今天用的办法就是现在我 ...

随机推荐

  1. [LOJ2537] [PKUWC2018] Minimax

    题目链接 LOJ:https://loj.ac/problem/2537 洛谷:https://www.luogu.org/problemnew/show/P5298 Solution 不定期诈尸 好 ...

  2. GRE

    第一个技术是GRE,全称Generic Routing Encapsulation,它是一种IP-over-IP的隧道技术.它将IP包封装在GRE包里,外面加上IP头,在隧道的一端封装数据包,并在通路 ...

  3. 从MVC -> MVVM ? 开发模式

    MVVM 到底是什么? view :由 MVC 中的 view 和 controller 组成,负责 UI 的展示,绑定 viewModel 中的属性,触发 viewModel 中的命令: viewM ...

  4. day33-python之多线程

    1.多线程实例 # import threading # import time # # import threading import time class MyThread(threading.T ...

  5. pycharm社区版对于django项目的创建

    学习django的基础的东西:python基础(虽然自己看了一遍,不过还有好多东西都是一知半解的,所以还要重复看,去加强自己的基础). 数据库SQL(自己也是对一些基础语句运用的不熟练,然后接下来的主 ...

  6. python面试总结4(算法与内置数据结构)

    算法与内置数据结构 常用算法和数据结构 sorted dict/list/set/tuple 分析时间/空间复杂度 实现常见数据结构和算法 数据结构/算法 语言内置 内置库 线性结构 list(列表) ...

  7. Linux命令——modprobe

    参考:5 UNIX / Linux modprobe Command Examples Linux modprobe command 简介 modprobe用于向Linux Kernel添加 或 移除 ...

  8. Locust 教程

    写在 Locust 教程开始的前面 本文参考了: Locust 教程 : https://www.axihe.com/tools/locust/home.html : locust 的官方 Githu ...

  9. WebAssembly(wasm)是什么?——学习

    WebAssembly 是一种可以使用非 JavaScript 编程语言编写代码并且能在浏览器上运行的技术方案. 参考文章标题:几张图让你看懂WebAssembly 参考地址:https://www. ...

  10. dll与exe

    文章:dll与exe的区别 地址:https://blog.csdn.net/qq_26591517/article/details/80389846