python模块之psutil

一、psutil模块

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、安装psutil模块

  1. CentOS安装psutil包:
  2. python版本:3.5
  3. wget https://pypi.python.org/packages/source/p/psutil/psutil-3.2.1.tar.gz --no-check-certificate
  4. tar zxvf psutil-3.2..tar.gz
  5. cd psutil-3.2.
  6. python setup.py install
  7.  
  8. Windos安装psutil包:
  9. D:\python35\Scripts>pip3.exe install psutil
  10. Collecting psutil
  11. Downloading psutil-5.3.-cp35-cp35m-win_amd64.whl (215kB)
  12. % |████████████████████████████████| 225kB 84kB/s
  13. Installing collected packages: psutil
  14. Successfully installed psutil-5.3.

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

1、CPU信息

  1. 使用cpu_times方法获取cpu的完整信息,如下所示。
  2. >>> psutil.cpu_times()
  3. 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)
  4. >>>
  5.  
  6. 获取单个数据,如用户的cpu时间或io等待时间,如下所示:
  7. >>> psutil.cpu_times().user
  8. 650617.11
  9. >>> psutil.cpu_times().iowait
  10. 68894.63
  11. >>>
  12.  
  13. 获取cpu逻辑和物理个数,默认logical值为True
  14. #CPU逻辑个数
  15. >>> psutil.cpu_count()
  16.  
  17. #CPU物理个数
  18. >>> psutil.cpu_count(logical=False)
  19.  
  20. >>>
  21.  
  22. 获取cpu的使用率:
  23. >>> psutil.cpu_percent()
  24. 2.5
  25. >>> psutil.cpu_percent()
  26. 2.5
  27. >>>

2、内存信息

  1. 内存信息的获取主要使用virtual_memory方法。swap就是使用swap_memory方法。
  2. >>> mem = psutil.virtual_memory()
  3. >>> mem
  4. svmem(total=, available=, percent=73.5, used=, free=, active=, inactive=, buffers=, cached=)
  5. >>> mem.total
  6.  
  7. >>> mem.used
  8.  
  9. >>> mem.free
  10.  
  11. >>> print(mem.total//)
  12. 3832.4375
  13. >>>
  14. 其中percent表示实际已经使用的内存占比,即(-)/*% 。available表示还可以使用的内存。

3、磁盘信息

  1. 磁盘信息主要有两部分,一个是磁盘的利用率,一个是io,他们分别可以通过disk_usagedisk_io_counters方法获取。
  2.  
  3. 如下先获取分区信息,然后看下根分区的使用情况:
  4. >>> psutil.disk_partitions()
  5. [sdiskpart(device='/dev/mapper/root', mountpoint='/', fstype='ext4', opts='rw,errors=remount-ro'), sdiskpart(device='/dev/sda1', mountpoint='/boot', fstype='ext2', opts='rw')]
  6. >>> psutil.disk_usage('/')
  7. sdiskusage(total=, used=, free=, percent=40.8)
  8. >>>
  9.  
  10. 默认disk_io_counters方法获取的是硬盘总的io数和读写信息,如果需要获取单个分区的io和读写信息加上"perdisk=True"参数。
  11. >>> psutil.disk_io_counters()
  12. sdiskio(read_count=, write_count=, read_bytes=, write_bytes=, read_time=, write_time=)
  13. >>> psutil.disk_io_counters(perdisk=True)
  14. {'vdb1': sdiskio(read_count=, write_count=, read_bytes=, write_bytes=, read_time=, write_time=), 'vda1': sdiskio(read_count=, write_count=, read_bytes=, write_bytes=, read_time=, write_time=)}
  15. >>>

4、网络信息

  1. 网络io和磁盘io使用方法差不多,主要使用net_io_counters方法,如果需要获取单个网卡的io信息,加上pernic=True参数。
  2. #获取网络总的io情况
  3. >>>
  4. >>> psutil.net_io_counters()
  5. snetio(bytes_sent=, bytes_recv=, packets_sent=, packets_recv=, errin=, errout=, dropin=, dropout=)
  6. #获取网卡的io情况
  7. >>>
  8. >>> psutil.net_io_counters(pernic=True)
  9. {'lo': snetio(bytes_sent=, bytes_recv=, packets_sent=, packets_recv=, errin=, errout=, dropin=, dropout=), 'eth0': snetio(bytes_sent=, bytes_recv=, packets_sent=, packets_recv=, errin=, errout=, dropin=, dropout=)}

5、其他系统信息

5.1、获取开机时间

  1. #以linux时间格式返回,可以使用时间戳转换
  2. >>> psutil.boot_time()
  3. 1496647567.0
  4.  
  5. #转换成自然时间格式
  6. >>> psutil.boot_time()
  7. 1496647567.0
  8. >>> datetime.datetime.fromtimestamp(psutil.boot_time ()).strftime("%Y-%m-%d %H: %M: %S")
  9. '2017-06-05 15: 26: 07'
  10. >>>

5.2、查看系统全部进程

  1. >>> psutil.pids()
  2. [, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ]

5.3、查看单个进程

  1. p = psutil.Process()
  2. p.name() #进程名
  3. p.exe() #进程的bin路径
  4. p.cwd() #进程的工作目录绝对路径
  5. p.status() #进程状态
  6. p.create_time() #进程创建时间
  7. p.uids() #进程uid信息
  8. p.gids() #进程的gid信息
  9. p.cpu_times() #进程的cpu时间信息,包括user,system两个cpu信息
  10. p.cpu_affinity() #get进程cpu亲和度,如果要设置cpu亲和度,将cpu号作为参考就好
  11. p.memory_percent() #进程内存利用率
  12. p.memory_info() #进程内存rss,vms信息
  13. p.io_counters() #进程的IO信息,包括读写IO数字及参数
  14. p.connectios() #返回进程列表
  15. p.num_threads() #进程开启的线程数
  16. 听过psutilPopen方法启动应用程序,可以跟踪程序的相关信息
  17. from subprocess import PIPE
  18. p = psutil.Popen(["/usr/bin/python", "-c", "print('hello')"],stdout=PIPE)
  19. p.name()
  20. p.username()

6、例子

查看系统硬件

  1. #!/usr/bin/env python
  2. #coding:utf-
  3.  
  4. import psutil
  5. import datetime
  6. import time
  7.  
  8. # 当前时间
  9. now_time = time.strftime('%Y-%m-%d-%H:%M:%S', time.localtime(time.time()))
  10. print(now_time)
  11.  
  12. # 查看cpu物理个数的信息
  13. print(u"物理CPU个数: %s" % psutil.cpu_count(logical=False))
  14.  
  15. #CPU的使用率
  16. cpu = (str(psutil.cpu_percent())) + '%'
  17. print(u"cup使用率: %s" % cpu)
  18.  
  19. #查看内存信息,剩余内存.free 总共.total
  20. #round()函数方法为返回浮点数x的四舍五入值。
  21.  
  22. free = str(round(psutil.virtual_memory().free / (1024.0 * 1024.0 * 1024.0), ))
  23. total = str(round(psutil.virtual_memory().total / (1024.0 * 1024.0 * 1024.0), ))
  24. memory = int(psutil.virtual_memory().total - psutil.virtual_memory().free) / float(psutil.virtual_memory().total)
  25. print(u"物理内存: %s G" % total)
  26. print(u"剩余物理内存: %s G" % free)
  27. print(u"物理内存使用率: %s %%" % int(memory * ))
  28. # 系统启动时间
  29. print(u"系统启动时间: %s" % datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d %H:%M:%S"))
  30.  
  31. # 系统用户
  32. users_count = len(psutil.users())
  33. #
  34. # >>> for u in psutil.users():
  35. # ... print(u)
  36. # ...
  37. # suser(name='root', terminal='pts/0', host='61.135.18.162', started=1505483904.0)
  38. # suser(name='root', terminal='pts/5', host='61.135.18.162', started=1505469056.0)
  39. # >>> u.name
  40. # 'root'
  41. # >>> u.terminal
  42. # 'pts/5'
  43. # >>> u.host
  44. # '61.135.18.162'
  45. # >>> u.started
  46. # 1505469056.0
  47. # >>>
  48.  
  49. users_list = ",".join([u.name for u in psutil.users()])
  50. print(u"当前有%s个用户,分别是 %s" % (users_count, users_list))
  51.  
  52. #网卡,可以得到网卡属性,连接数,当前流量等信息
  53. net = psutil.net_io_counters()
  54. bytes_sent = '{0:.2f} Mb'.format(net.bytes_recv / / )
  55. bytes_rcvd = '{0:.2f} Mb'.format(net.bytes_sent / / )
  56. print(u"网卡接收流量 %s 网卡发送流量 %s" % (bytes_rcvd, bytes_sent))
  57.  
  58. io = psutil.disk_partitions()
  59. # print(io)
  60. # print("io[-1]为",io[-])
  61. #del io[-]
  62.  
  63. print('-----------------------------磁盘信息---------------------------------------')
  64.  
  65. print("系统磁盘信息:" + str(io))
  66.  
  67. for i in io:
  68. o = psutil.disk_usage(i.device)
  69. print("总容量:" + str(int(o.total / (1024.0 * 1024.0 * 1024.0))) + "G")
  70. print("已用容量:" + str(int(o.used / (1024.0 * 1024.0 * 1024.0))) + "G")
  71. print("可用容量:" + str(int(o.free / (1024.0 * 1024.0 * 1024.0))) + "G")
  72.  
  73. print('-----------------------------进程信息-------------------------------------')
  74. # 查看系统全部进程
  75. for pnum in psutil.pids():
  76. p = psutil.Process(pnum)
  77. print(u"进程名 %-20s 内存利用率 %-18s 进程状态 %-10s 创建时间 %-10s " \
  78. % (p.name(), p.memory_percent(), p.status(), p.create_time()))

以上是psutil模块获取linux系统基础信息的几个方法,常用的数据就这些。当然其他用法还有很多,详情可以参考官方文档。

psutil模块的更多相关文章

  1. 15.python笔记之psutil模块

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

  2. psutil模块安装指南(win与linux)

    1.windows下psutil模块安装: https://pypi.python.org/packages/3.4/p/psutil/ 下载符合版本的软件包下载,然后安装即可. 2.ubuntu下载 ...

  3. CentOS7--64安装python的psutil模块

    1.以root身份登陆CentOS依次 执行以下命令: wget https://pypi.python.org/packages/source/p/psutil/psutil-2.1.3.tar.g ...

  4. Python 中psutil 模块的安装

    第一步下载psutil 的安装包 网址:https://pypi.python.org 第二步解压 .tar.gz cd psutil- 第三步安装: python setup.py build py ...

  5. 自动化之路 python psutil模块 收集硬件信息

    一.psutil模块 1. psutil是一个跨平台库,能够轻松实现获取系统运行的进程和系统利用率(包括CPU.内存.磁盘.网络等)信息.它主要应用于系统监控,分析和限制系统资源及进程的管理.它实现了 ...

  6. [Python Study Notes]psutil模块

    系统性能信息模块psutil psutil是一个跨平台库,能够轻松实现获取系统运行的进程和系统利用率(CPU,内存,磁盘,网络等)信息,主要应用于系统监控,分析和限制系统资源及进程的管理,它实现了同等 ...

  7. python之psutil模块(获取系统性能数据)

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

  8. python之psutil模块(获取系统性能信息(CPU,内存,磁盘,网络)

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

  9. python笔记之psutil模块

    收集教程 http://www.cnblogs.com/xiao1/p/6164204.html 实战教程 安装psutil模块 pip2 install psutil 实战代码 #encoding= ...

随机推荐

  1. 显示定位方法,提取中间text 封装成函数的方法

    tager='工作台' element=WebDriverWait(self.dr,15,0.1).until( eval("lambda x: x."+'find_element ...

  2. Java学习——用户电话输入显示

    编写程序:在窗口中添加组件,产生如下图形化界面:当用户输入用户名和电话后,点击显示按钮后,按下图格式显示. package cys; import java.awt.*; import java.aw ...

  3. Java学习——Applet画8个同心圆

    import java.awt.*; import java.applet.*; public class GUI3 extends Applet{ public void paint(Graphic ...

  4. [转][xml]SQL转义

    SQL语句包含">"和"<"时,在PL/SQL中可以正常运行,但是放在XML中,编译报错,这是因为在XML文档中的所有文本都会被解析器解析,文本内容 ...

  5. 1127 ZigZagging on a Tree (30 分)

    1127 ZigZagging on a Tree (30 分) Suppose that all the keys in a binary tree are distinct positive in ...

  6. 为帮助保护你的安全,您的Web浏览器已经限制此文件显示可能访问您的计算机的活动内容

    在开发时,会遇到是要HTML来做UI,是要js与C++进行交互. 在加载完页面后,一些电脑中会出现“为帮助保护你的安全,您的Web浏览器已经限制此文件显示可能访问您的计算机的活动内容”(用IE打开,自 ...

  7. Hash算法原理的简单分析

    哈希计算就是努力的把比较大的数据存放到相对较小的空间中.最常见的哈希算法是取模法.下面简单讲讲取模法的计算过程.比如:数组的长度是5.这时有一个数据是6.那么如何把这个6存放到长度只有5的数组中呢.按 ...

  8. 跨域验证cookie与缓存控制

    1. 是否能跨域完全取决于浏览器控制,浏览器可以直接拒绝发送跨域请求(服务器根本收不到),也可以发送给服务器等接收到返回信息后决定是否让它被读取. 2. 服务器并不能辨别请求是从哪个源发过来的,只有在 ...

  9. hadoop 分布式机群搭建

    描述:鉴于本地电脑内存限制,采用三台虚机安装此环境. 主机名,分别为master.slave1.slave2. zookeeper分别安装这三台机器上,master和slave1做主从备份, slav ...

  10. admin源码解析以及仿照admin设计stark组件

    ---恢复内容开始--- admin源码解析 一 启动:每个APP下的apps.py文件中. 首先执行每个APP下的admin.py 文件. def autodiscover(): autodisco ...