1. psutil模块的介绍
在Python中,我们可以使用
psutil这个第三方模块去获取信息的信息。
psutil模块可以跨平台使用,支持Linux/UNIX/OSX/Windows等,它主要用来做系统监控,性能分析,进程管理等。
安装psutil模块也非常简单,在cmd命令行下输入:pip install psutil
2. psutil模块的使用
(1)获取CPU信息:
使用psutil.cpu_times()获取CPU的完整信息;
-
>>>
import psutil
-
>>> psutil.cpu_times()
-
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;
-
>>> psutil.cpu_count()
-
4
-
>>> psutil.cpu_count(logical=
False)
-
2
psutil获取系统CPU使用率的方法是cpu_percent(),其有两个参数,分别是interval和percpu;
interval指定的是计算cpu使用率的时间间隔,percpu则指定是选择总的使用率还是每个cpu的使用率;
-
>>>
for x
in range(
10):
-
... psutil.cpu_percent(interval=
1)
-
...
-
7.4
-
7.8
-
8.2
-
8.6
-
9.3
-
8.1
-
8.0
-
7.3
-
9.8
-
15.8
-
>>>
for x
in range(
10):
-
... psutil.cpu_percent(interval=
1,percpu=
True)
-
...
-
[
10.9,
11.8,
15.6,
0.0]
-
[
13.8,
3.1,
10.8,
3.1]
-
[
14.1,
8.7,
6.3,
0.0]
-
[
14.1,
9.1,
6.3,
0.0]
-
[
15.6,
8.8,
17.2,
0.0]
-
[
23.4,
3.1,
9.4,
0.0]
-
[
18.7,
9.0,
7.8,
0.0]
-
[
15.6,
9.1,
14.1,
0.0]
-
[
26.6,
0.0,
23.4,
0.0]
-
[
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;
-
>>> psutil.virtual_memory()
-
svmem(total=
8457662464, available=
3598602240, percent=
57.5, used=
4859060224, free=
3598602240)
使用 psutil.swap_memory()获取系统交换内存的统计信息;
-
>>> psutil.swap_memory()
-
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统计信息(读写速度等);
-
>>> psutil.disk_partitions()
-
[sdiskpart(device=
'C:\\', mountpoint=
'C:\\', fstype=
'NTFS', opts=
'rw,fixed'), sdiskpart(device=
'D:\\', mountpoint=
'D:\\', fstype=
'NTFS', opts=
'rw,fixe
-
d'), sdiskpart(device=
'E:\\', mountpoint=
'E:\\', fstype=
'NTFS', opts=
'rw,fixed')]
-
-
>>> psutil.disk_usage(
'/')
-
sdiskusage(total=
119821824000, used=
60241117184, free=
59580706816, percent=
50.3)
-
-
>>> psutil.disk_io_counters()
-
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信息
-
>>> psutil.net_io_counters()
-
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信息
-
>>> psutil.net_io_counters(pernic=
True)
-
{
'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
-
tes_recv=
14170950, packets_sent=
24199, packets_recv=
24613, errin=
0, errout=
255, dropin=
0, dropout=
0)}
使用 psutil.net_if_addrs() 获取网络接口信息
-
>>> psutil.net_if_addrs()
-
{
'Npcap Loopback Adapter': [snicaddr(family=<AddressFamily.AF_LINK:
-1>, address=
'02-00-4C-4F-4F-50', netmask=
None, broadcast=
None, ptp=
None), snicadd
-
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>
-
, address=
'::1', netmask=
None, broadcast=
None, ptp=
None)],
'本地连接': [snicaddr(family=<AddressFamily.AF_LINK:
-1>, address=
'FC-45-96-7F-7E-9E', netm
-
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=
-
None), snicaddr(family=<AddressFamily.AF_INET6:
23>, address=
'fe80::9594:8742:c758:40e3', netmask=
None, broadcast=
None, ptp=
None)]}
使用psutil.net_if_stats()获取网络接口状态信息
-
>>> psutil.net_if_stats()
-
{
'本地连接': snicstats(isup=
False, duplex=<NicDuplex.NIC_DUPLEX_FULL:
2>, speed=
0, mtu=
1500),
'VMware Network Adapter VMnet1': snicstats(isup=
True, du
-
plex=<NicDuplex.NIC_DUPLEX_FULL:
2>, speed=
100, mtu=
1500),
'VMware Network Adapter VMnet8': snicstats(isup=
True, duplex=<NicDuplex.NIC_DUPLEX_FULL:
2>
-
, speed=
100, mtu=
1500),
'Loopback Pseudo-Interface 1': snicstats(isup=
True, duplex=<NicDuplex.NIC_DUPLEX_FULL:
2>, speed=
1073, mtu=
1500),
'Npcap Loopb
-
ack Adapter': snicstats(isup=
True, duplex=<NicDuplex.NIC_DUPLEX_FULL:
2>, speed=
10, mtu=
1500),
'无线网络连接': snicstats(isup=
True, duplex=<NicDuplex.
-
NIC_DUPLEX_FULL:
2>, speed=
4294, mtu=
1500),
'isatap.{53D15CD1-4A3F-4911-9824-DC7F561E0DFA}': snicstats(isup=
False, duplex=<NicDuplex.NIC_DUPLEX_FULL:
-
2>, speed=
0, mtu=
1280)}
(5)获取其他系统信息:
获取系统的开机时间,并转化为自然的格式
-
>>> psutil.boot_time()
-
1551576293.0
-
>>>
import datetime
-
>>> datetime.datetime.fromtimestamp(psutil.boot_time ()).strftime(
"%Y-%m-%d %H: %M: %S")
-
'2019-03-03 09: 24: 53'
获取连接系统的用户列表:
-
>>> psutil.users()
-
[suser(name=
'Lenovo', terminal=
None, host=
'0.0.0.0', started=
1551576310.0, pid=
None)]
获取系统全部的进程信息:
-
>>> psutil.pids()
-
[
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
-
,
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
-
,
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
-
,
9192,
2984,
1988,
8392,
7724,
1844,
3232,
2188,
7984,
4288,
4268,
7916,
9468,
3308]
获取单个进程的信息:
-
>>> p=psutil.Process(
1988)
#获取指定进程ID=1988
-
>>> p.name()
#进程名
-
'vmware.exe'
-
-
>>> p.exe
#进程的bin路径
-
<bound method Process.exe of psutil.Process(pid=
1988, name=
'vmware.exe', started=
'09:48:13')>
-
-
>>> p.cwd()
#进程的工作目录绝对路径
-
'E:\\soft_file\\VMWARE'
-
-
>>> p.cmdline()
#进程启动的命令行
-
[
'E:\\soft_file\\VMWARE\\vmware.exe']
-
-
>>> p.ppid()
#父进程ID
-
4972
-
-
>>> p.parent()
#父进程
-
psutil.Process(pid=
4972, name=
'DesktopMgr64.exe', started=
'09:25:21')
-
-
>>> p.children()
# 子进程列表
-
[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')]
-
-
>>> p.status()
# 进程状态
-
'running'
-
-
>>> p.username()
#进程的用户名
-
'Lenovo-PC\\Lenovo'
-
-
>>> p.create_time()
# 进程创建的时间
-
1551577693.0
-
-
>>> p.cpu_times()
# 进程使用的CPU时间
-
pcputimes(user=
6.552042, system=
6.3804409, children_user=
0.0, children_system=
0.0)
-
-
>>> p.memory_info()
# 进程使用的内存
-
pmem(rss=
122986496, vms=
96821248, num_page_faults=
131494, peak_wset=
133181440, wset=
122986496, peak_paged_pool=
529816, paged_pool=
488896, peak_nonpage
-
d_pool=
97656, nonpaged_pool=
89240, pagefile=
96821248, peak_pagefile=
107077632, private=
96821248)
-
-
>>> p.num_threads()
# 进程的线程数量
-
17
-
-
>>> p.threads()
# 所有线程信息
-
[pthread(id=
8792, user_time=
6.021638599999999, system_time=
5.7876370999999995), pthread(id=
8528, user_time=
0.031200199999999997, system_time=
0.0312001
-
99999999997), ....]
-
-
>>> p.terminate()
# 结束进程
博文参考连接(廖雪峰的官方网站):https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001511052957192bb91a56a2339485c8a8c79812b400d49000
本文详细介绍Python第三方模块psutil的功能和使用方法,包括获取CPU、内存、磁盘、网络信息及系统进程管理,适用于跨平台系统监控和性能分析。
3万+

被折叠的 条评论
为什么被折叠?



