摘要:通过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,opts
含rw
表示可读写。
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吧( ̄▽ ̄)~*