Python psutil模块的使用详解[转]

本文详细介绍Python第三方模块psutil的功能和使用方法,包括获取CPU、内存、磁盘、网络信息及系统进程管理,适用于跨平台系统监控和性能分析。

1. psutil模块的介绍

在Python中,我们可以使用psutil这个第三方模块去获取信息的信息。

psutil模块可以跨平台使用,支持Linux/UNIX/OSX/Windows等,它主要用来做系统监控,性能分析,进程管理等。

安装psutil模块也非常简单,在cmd命令行下输入:pip  install  psutil

2. psutil模块的使用

(1)获取CPU信息:

使用psutil.cpu_times()获取CPU的完整信息;


 
  1. >>> import psutil
  2. >>> psutil.cpu_times()
  3. scputimes(user= 1082.5689395, system= 1252.5164289000004, idle= 10992.4232638, interrupt= 93.35099840000001, dpc= 41.667867099999995)

 使用psutil.cpu_count()获取CPU的逻辑个数;psutil.cpu_count(logical=False)获取CPU的物理个数;默认logical值为True;


 
  1. >>> psutil.cpu_count()
  2. 4
  3. >>> psutil.cpu_count(logical= False)
  4. 2

psutil获取系统CPU使用率的方法是cpu_percent(),其有两个参数,分别是interval和percpu;

interval指定的是计算cpu使用率的时间间隔,percpu则指定是选择总的使用率还是每个cpu的使用率;


 
  1. >>> for x in range( 10):
  2. ... psutil.cpu_percent(interval= 1)
  3. ...
  4. 7.4
  5. 7.8
  6. 8.2
  7. 8.6
  8. 9.3
  9. 8.1
  10. 8.0
  11. 7.3
  12. 9.8
  13. 15.8
  14. >>> for x in range( 10):
  15. ... psutil.cpu_percent(interval= 1,percpu= True)
  16. ...
  17. [ 10.9, 11.8, 15.6, 0.0]
  18. [ 13.8, 3.1, 10.8, 3.1]
  19. [ 14.1, 8.7, 6.3, 0.0]
  20. [ 14.1, 9.1, 6.3, 0.0]
  21. [ 15.6, 8.8, 17.2, 0.0]
  22. [ 23.4, 3.1, 9.4, 0.0]
  23. [ 18.7, 9.0, 7.8, 0.0]
  24. [ 15.6, 9.1, 14.1, 0.0]
  25. [ 26.6, 0.0, 23.4, 0.0]
  26. [ 7.8, 9.4, 18.7, 0.0]

(2)获取内存信息:

使用psutil.virtual_memory() 获取系统内存的使用情况;

可以看到,总内存大小是8457662464KB=8 GB,已用4859060224 KB= 4.5 GB,使用了57.5%。剩余内存为3598602240KB=3.5G;


 
  1. >>> psutil.virtual_memory()
  2. svmem(total= 8457662464, available= 3598602240, percent= 57.5, used= 4859060224, free= 3598602240)

使用 psutil.swap_memory()获取系统交换内存的统计信息;


 
  1. >>> psutil.swap_memory()
  2. sswap(total= 16913375232, used= 5444091904, free= 11469283328, percent= 32.2, sin= 0, sout= 0)

(3)获取磁盘信息:

使用 psutil.disk_partitions() 获取磁盘分区的信息;

使用psutil.disk_usage('/')获取磁盘的使用情况;

使用psutil.disk_io_counters() 获取磁盘的IO统计信息(读写速度等);


 
  1. >>> psutil.disk_partitions()
  2. [sdiskpart(device= 'C:\\', mountpoint= 'C:\\', fstype= 'NTFS', opts= 'rw,fixed'), sdiskpart(device= 'D:\\', mountpoint= 'D:\\', fstype= 'NTFS', opts= 'rw,fixe
  3. d'), sdiskpart(device= 'E:\\', mountpoint= 'E:\\', fstype= 'NTFS', opts= 'rw,fixed')]
  4. >>> psutil.disk_usage( '/')
  5. sdiskusage(total= 119821824000, used= 60241117184, free= 59580706816, percent= 50.3)
  6. >>> psutil.disk_io_counters()
  7. sdiskio(read_count= 207246, write_count= 87647, read_bytes= 5948826624, write_bytes= 5090843648, read_time= 745, write_time= 252)

(4)获取网络信息:

使用psutil.net_io_counters()获取总的网络IO信息


 
  1. >>> psutil.net_io_counters()
  2. snetio(bytes_sent= 3398615, bytes_recv= 14170744, packets_sent= 28431, packets_recv= 25604, errin= 0, errout= 255, dropin= 0, dropout= 0)

 使用 psutil.net_io_counters(pernic=True)获取网卡的IO信息


 
  1. >>> psutil.net_io_counters(pernic= True)
  2. { 'Npcap Loopback Adapter': snetio(bytes_sent= 0, bytes_recv= 0, packets_sent= 0, packets_recv= 0, errin= 0, errout= 0, dropin= 0, dropout= 0), '本地连接': snetio(bytes_sent= 0, bytes_recv= 0, packets_sent= 0, packets_recv= 0, errin= 0, errout= 0, dropin= 0, dropout= 0), '无线网络连接': snetio(bytes_sent= 3397477, by
  3. tes_recv= 14170950, packets_sent= 24199, packets_recv= 24613, errin= 0, errout= 255, dropin= 0, dropout= 0)}

使用 psutil.net_if_addrs() 获取网络接口信息


 
  1. >>> psutil.net_if_addrs()
  2. { 'Npcap Loopback Adapter': [snicaddr(family=<AddressFamily.AF_LINK: -1>, address= '02-00-4C-4F-4F-50', netmask= None, broadcast= None, ptp= None), snicadd
  3. r(family=<AddressFamily.AF_INET: 2>, address= '127.0.0.1', netmask= '255.0.0.0', broadcast= None, ptp= None), snicaddr(family=<AddressFamily.AF_INET6: 23>
  4. , address= '::1', netmask= None, broadcast= None, ptp= None)], '本地连接': [snicaddr(family=<AddressFamily.AF_LINK: -1>, address= 'FC-45-96-7F-7E-9E', netm
  5. ask= None, broadcast= None, ptp= None), snicaddr(family=<AddressFamily.AF_INET: 2>, address= '169.254.64.227', netmask= '255.255.0.0', broadcast= None, ptp=
  6. None), snicaddr(family=<AddressFamily.AF_INET6: 23>, address= 'fe80::9594:8742:c758:40e3', netmask= None, broadcast= None, ptp= None)]}

使用psutil.net_if_stats()获取网络接口状态信息


 
  1. >>> psutil.net_if_stats()
  2. { '本地连接': snicstats(isup= False, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed= 0, mtu= 1500), 'VMware Network Adapter VMnet1': snicstats(isup= True, du
  3. plex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed= 100, mtu= 1500), 'VMware Network Adapter VMnet8': snicstats(isup= True, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>
  4. , speed= 100, mtu= 1500), 'Loopback Pseudo-Interface 1': snicstats(isup= True, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed= 1073, mtu= 1500), 'Npcap Loopb
  5. ack Adapter': snicstats(isup= True, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed= 10, mtu= 1500), '无线网络连接': snicstats(isup= True, duplex=<NicDuplex.
  6. NIC_DUPLEX_FULL: 2>, speed= 4294, mtu= 1500), 'isatap.{53D15CD1-4A3F-4911-9824-DC7F561E0DFA}': snicstats(isup= False, duplex=<NicDuplex.NIC_DUPLEX_FULL:
  7. 2>, speed= 0, mtu= 1280)}

(5)获取其他系统信息:

获取系统的开机时间,并转化为自然的格式


 
  1. >>> psutil.boot_time()
  2. 1551576293.0
  3. >>> import datetime
  4. >>> datetime.datetime.fromtimestamp(psutil.boot_time ()).strftime( "%Y-%m-%d %H: %M: %S")
  5. '2019-03-03 09: 24: 53'

 获取连接系统的用户列表:


 
  1. >>> psutil.users()
  2. [suser(name= 'Lenovo', terminal= None, host= '0.0.0.0', started= 1551576310.0, pid= None)]

获取系统全部的进程信息:


 
  1. >>> psutil.pids()
  2. [ 0, 4, 404, 632, 728, 736, 796, 832, 844, 852, 948, 648, 848, 1032, 1056, 1180, 1260, 1364, 1412, 1436, 1576, 1692, 1736, 1868, 1964, 1464, 1460, 2176
  3. , 2224, 2248, 2312, 2400, 2464, 2508, 2576, 2672, 2732, 2776, 2820, 2940, 2460, 3276, 3396, 3540, 4000, 2164, 1880, 3600, 4076, 4588, 4608, 4916, 4924
  4. , 4972, 5316, 6000, 6284, 7040, 6844, 7132, 6976, 5268, 4148, 7476, 7776, 8188, 4084, 2688, 5088, 6352, 9036, 8560, 7784, 8436, 8448, 8284, 8228, 9196
  5. , 9192, 2984, 1988, 8392, 7724, 1844, 3232, 2188, 7984, 4288, 4268, 7916, 9468, 3308]

获取单个进程的信息:


 
  1. >>> p=psutil.Process( 1988) #获取指定进程ID=1988
  2. >>> p.name() #进程名
  3. 'vmware.exe'
  4. >>> p.exe #进程的bin路径
  5. <bound method Process.exe of psutil.Process(pid= 1988, name= 'vmware.exe', started= '09:48:13')>
  6. >>> p.cwd() #进程的工作目录绝对路径
  7. 'E:\\soft_file\\VMWARE'
  8. >>> p.cmdline() #进程启动的命令行
  9. [ 'E:\\soft_file\\VMWARE\\vmware.exe']
  10. >>> p.ppid() #父进程ID
  11. 4972
  12. >>> p.parent() #父进程
  13. psutil.Process(pid= 4972, name= 'DesktopMgr64.exe', started= '09:25:21')
  14. >>> p.children() # 子进程列表
  15. [psutil.Process(pid= 7724, name= 'vmware-tray.exe', started= '09:48:18'), psutil.Process(pid= 1844, name= 'vmware-unity-helper.exe', started= '09:48:25')]
  16. >>> p.status() # 进程状态
  17. 'running'
  18. >>> p.username() #进程的用户名
  19. 'Lenovo-PC\\Lenovo'
  20. >>> p.create_time() # 进程创建的时间
  21. 1551577693.0
  22. >>> p.cpu_times() # 进程使用的CPU时间
  23. pcputimes(user= 6.552042, system= 6.3804409, children_user= 0.0, children_system= 0.0)
  24. >>> p.memory_info() # 进程使用的内存
  25. pmem(rss= 122986496, vms= 96821248, num_page_faults= 131494, peak_wset= 133181440, wset= 122986496, peak_paged_pool= 529816, paged_pool= 488896, peak_nonpage
  26. d_pool= 97656, nonpaged_pool= 89240, pagefile= 96821248, peak_pagefile= 107077632, private= 96821248)
  27. >>> p.num_threads() # 进程的线程数量
  28. 17
  29. >>> p.threads() # 所有线程信息
  30. [pthread(id= 8792, user_time= 6.021638599999999, system_time= 5.7876370999999995), pthread(id= 8528, user_time= 0.031200199999999997, system_time= 0.0312001
  31. 99999999997), ....]
  32. >>> p.terminate() # 结束进程

博文参考连接(廖雪峰的官方网站):https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001511052957192bb91a56a2339485c8a8c79812b400d49000

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值