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

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


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


目录

常用第三方模块
psutil
安装psutil
获取CPU信息
获取内存信息
获取磁盘信息
获取网络信息
获取进程信息
小结

常用第三方模块

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吧( ̄▽ ̄)~*

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,509评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,806评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,875评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,441评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,488评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,365评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,190评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,062评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,500评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,706评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,834评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,559评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,167评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,779评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,912评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,958评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,779评论 2 354

推荐阅读更多精彩内容