【Python入门】36.常用第三方模块之 获取系统信息psutil

摘要:通过psutil模块,我们可以轻松地获取CPU、内存、磁盘、网络、进程等相关信息,是系统管理与维护必不可少的模块。


写在前面:为了更好的学习python,博主记录下自己的学习路程。本学习笔记基于廖雪峰的Python教程,如有侵权,请告知删除。欢迎与博主一起学习Pythonヽ( ̄▽ ̄)ノ


目录

常用第三方模块

psutil

psutil,指process and system utilities。它的功能时获取系统相关信息,实现系统监控。

psutil支持跨平台使用,支持Linux/UNIX/OSX/Windows等。是系统管理不可缺少的模块。

安装psutil

在命令行模式下输入:

pip install psutil

等待安装完成即可。

获取CPU信息

psutil.cpu_count()获取cpu的逻辑个数和物理个数:

>>>import psutil
>>>psutil.cpu_count()
2
>>>psutil.cpu_count(logical+False)
2

信息显示cpu是2核非超线程。

psutil.cpu_times()获取cpu所有信息:

>>>psutil.cpu_times()
scputimes(user=33700.5996281, system=13064.771748000057, idle=327437.26934339997, interrupt=827.1329021, dpc=476.0682517) 

psutil.cpu_percent()获取cpu的使用率:

>>>psutil.cpu_percent(interval=1, percpu=True)
[19.7, 23.1] 

获取内存信息

psutil.virtual_memory()获取物理内存:

>>>psutil.virtual_memory()
svmem(total=8457904128, available=5363146752, percent=36.6, used=3094757376, free=5363146752) 

返回值以字节为单位,结果显示,总内存大小为8457904128 = 7.8GB,已用3094757376 = 2.8GB,占用了36.6%。

psutil.swap_memory()获取交换内存:

>>>psutil.swap_memory()
sswap(total=16913903616, used=4278480896, free=12635422720, percent=25.3, sin=0, sout=0) 

显示交换区大小是16913903616 = 15 GB。

获取磁盘信息

psutil.disk_partitions()获取磁盘分区信息:

>>>psutil.disk_partitions()
[sdiskpart(device='C:\\', mountpoint='C:\\', fstype='NTFS', opts='rw,fixed'), sdiskpart(device='D:\\', mountpoint='D:\\', fstype='NTFS', opts='rw,fixed'), sdiskpart(device='E:\\', mountpoint='E:\\', fstype='', opts='cdrom')] 

信息显示,c盘的文件系统是NTFS,optsrw表示可读写。

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

>>>psutil.disk_usage('/')
sdiskusage(total=41881169920, used=35088613376, free=6792556544, percent=83.8) 

信息显示,c磁盘总容量为41881169920 = 39GB,使用83.8%。

psutil.disk_io_counters()获取磁盘IO信息:

>>>psutil.disk_io_counters()
sdiskio(read_count=902615, write_count=1299370, read_bytes=13761329664, write_bytes=40651160064, read_time=463, write_time=1647) 

获取网络信息

psutil.net_io_counters()获取网络读写字节/包的个数:

>>>psutil.net_io_counters()
snetio(bytes_sent=366407235, bytes_recv=11336031853, packets_sent=5187036, packets_recv=8932277, errin=0, errout=0, dropin=0, dropout=0) 

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

>>>psutil.net_if_addrs()
{
  '本地连接 2': [snicaddr(family=<AddressFamily.AF_LINK: -1>, address='88-51-FB-7D-38-FA', netmask=None,...]
  '无线网络连接 40':[snicaddr(family=<AddressFamily.AF_LINK: -1>,...]
  '无线网络连接 39':[...]
  ...
}

psutil.net_if_stats()获取网络接口状态:

>>>psutil.net_if_stats()
{
  '本地连接 2': snicstats(isup=False, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed=0, mtu=1500),
  '无线网络连接 40': snicstats(isup=False, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed=0, mtu=1500),
  '无线网络连接 39': snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed=225, mtu=1500), 
  ...
}

psutil.net_connections()获取当前网络连接信息:

>>>psutil.net_connections()
[
  sconn(fd=-1, family=<AddressFamily.AF_INET: 2>, type=1, laddr=addr(ip='127.0.0.1', port=21440), raddr=(), status='LISTEN', pid=344), 
  sconn(fd=-1, family=<AddressFamily.AF_INET: 2>, type=1, laddr=addr(ip='192.168.0.119', port=52680), raddr=addr(ip='120.92.144.250', port=443), status='ESTABLISHED', pid=1288),
  sconn(fd=-1, family=<AddressFamily.AF_INET6: 23>, type=1, laddr=addr(ip='::', port=49173), raddr=(), status='LISTEN', pid=612), 
  ...
  sconn(fd=-1, family=<AddressFamily.AF_INET: 2>, type=2, laddr=addr(ip='192.168.0.119', port=138), raddr=(), status='NONE', pid=4)
] 

注:你可能会得到一个AccessDenied错误,原因是psutil获取信息也是要走系统接口,而获取网络连接信息需要root权限,这种情况下,可以退出Python交互环境,用sudo重新启动

获取进程信息

psutil.pids()获取所有进程ID:

>>>psutil.pids()
[0, 4, 312, 488, 540, 556, 596, 612, 620,..,11440, 8924] 

获取具体进程的相关信息:

>>> p = psutil.Process(11232)   # 获取指定进程ID=11232,该进程是python.exe
>>> p.name()                    # 进程名称
'python.exe '
>>> p.exe()                     # 进程exe路径
'D:\program files (x86)\Python37\python.exe '
>>> p.cwd()                     # 进程工作目录
'C:\Users\Administrator '
>>> p.cmdline()                 # 进程启动的命令行
['python'] 
>>> p.ppid()                    # 父进程ID
10284 
>>> p.parent()                  # 父进程
psutil.Process(pid=10284, name='cmd.exe', started='15:48:27') 
>>> p.children()                # 子进程列表
[]
>>> p.status()                  # 进程状态
'running'
>>> p.username()                # 进程用户名
'MS-20170504FUSX\Administrator '
>>> p.create_time()             # 进程创建时间
1535960910.0 
>>> p.cpu_times()               # 进程使用的CPU时间
pcputimes(user=0.046800299999999996, system=0.062400399999999995, children_user=0.0, children_system=0.0) 
>>> p.memory_info()             # 进程使用的内存
pmem(rss=13094912, vms=8167424,..., private=8167424)
>>> p.open_files()              # 进程打开的文件
[popenfile(path='C:\\Windows\\System32\\zh-CN\\kernel32.dll.mui', fd=-1), ...] 
>>> p.connections()             # 进程相关网络连接
[]
>>> p.num_threads()             # 进程的线程数量
2
>>> p.threads()                 # 所有线程信息
[pthread(id=10408, user_time=0.046800299999999996, system_time=0.062400399999999995), pthread(id=7924, user_time=0.0, system_time=0.0)] 
>>> p.environ()                 # 进程环境变量
{'ALLUSERSPROFILE': 'C:\\ProgramData', 'APPDATA': 'C:\\Users\\Administrator\\AppData\\Roaming', 'ASL.LOG': 'Destination=file', ...}
>>> p.terminate()               # 结束进程

注:和获取网络连接类似,获取一个root用户的进程需要root权限,启动Python交互环境或者.py文件时,需要sudo权限。

psutil还提供了一个test()函数,可以模拟出ps命令的效果:

>>> import psutil
>>> psutil.test()
USER         PID %MEM     VSZ     RSS TTY           START    TIME  COMMAND 
SYSTEM         0    ?       ?      24 ?             Sep01   50:57  System Idle Process 
SYSTEM         4    ?     120     368 ?             Sep01   53:01  System 
             152  0.2    9992   19232 ?             Sep01   00:03  svchost.exe 
Administra   224  0.1    2360    7264 ?             Sep01   00:00  conhost.exe 
             312    ?     444    1132 ?             Sep01   00:00  smss.exe 
...

小结

psutil模块的功能十分强大,可以获取CPU、内存、磁盘、网络等等系统信息。
psutil还有其他更多的功能,如获取用户、Windows服务等信息,具体请参考psutil的官网


以上就是本节的全部内容,感谢你的阅读。

下一节内容:常用第三方模块之 virtualenv

有任何问题与想法,欢迎评论与吐槽。

和博主一起学习Python吧( ̄▽ ̄)~*

猜你喜欢

转载自blog.csdn.net/lecorn/article/details/82349596