摘要:通過psutil模塊秸苗,我們可以輕松地獲取CPU召娜、內(nèi)存运褪、磁盤、網(wǎng)絡(luò)、進(jìn)程等相關(guān)信息秸讹,是系統(tǒng)管理與維護(hù)必不可少的模塊檀咙。
*寫在前面:為了更好的學(xué)習(xí)python,博主記錄下自己的學(xué)習(xí)路程璃诀。本學(xué)習(xí)筆記基于廖雪峰的Python教程弧可,如有侵權(quán),請告知?jiǎng)h除劣欢。歡迎與博主一起學(xué)習(xí)Pythonヽ( ̄▽ ̄)? *
目錄
常用第三方模塊
psutil
安裝psutil
獲取CPU信息
獲取內(nèi)存信息
獲取磁盤信息
獲取網(wǎng)絡(luò)信息
獲取進(jìn)程信息
小結(jié)
常用第三方模塊
psutil
psutil棕诵,指process and system utilities。它的功能時(shí)獲取系統(tǒng)相關(guān)信息凿将,實(shí)現(xiàn)系統(tǒng)監(jiān)控校套。
psutil支持跨平臺(tái)使用,支持Linux/UNIX/OSX/Windows等牧抵。是系統(tǒng)管理不可缺少的模塊笛匙。
安裝psutil
在命令行模式下輸入:
pip install psutil
等待安裝完成即可。
獲取CPU信息
psutil.cpu_count()
獲取cpu的邏輯個(gè)數(shù)和物理個(gè)數(shù):
>>>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]
獲取內(nèi)存信息
psutil.virtual_memory()
獲取物理內(nèi)存:
>>>psutil.virtual_memory()
svmem(total=8457904128, available=5363146752, percent=36.6, used=3094757376, free=5363146752)
返回值以字節(jié)為單位妹孙,結(jié)果顯示,總內(nèi)存大小為8457904128 = 7.8GB获枝,已用3094757376 = 2.8GB蠢正,占用了36.6%。
psutil.swap_memory()
獲取交換內(nèi)存:
>>>psutil.swap_memory()
sswap(total=16913903616, used=4278480896, free=12635422720, percent=25.3, sin=0, sout=0)
顯示交換區(qū)大小是16913903616 = 15 GB映琳。
獲取磁盤信息
psutil.disk_partitions()
獲取磁盤分區(qū)信息:
>>>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盤的文件系統(tǒng)是NTFS,opts
含rw
表示可讀寫萨西。
psutil.disk_usage('/')
獲取磁盤使用情況:
>>>psutil.disk_usage('/')
sdiskusage(total=41881169920, used=35088613376, free=6792556544, percent=83.8)
信息顯示有鹿,c磁盤總?cè)萘繛?1881169920 = 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)
獲取網(wǎng)絡(luò)信息
psutil.net_io_counters()
獲取網(wǎng)絡(luò)讀寫字節(jié)/包的個(gè)數(shù):
>>>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()
獲取網(wǎng)絡(luò)接口信息:
>>>psutil.net_if_addrs()
{
'本地連接 2': [snicaddr(family=<AddressFamily.AF_LINK: -1>, address='88-51-FB-7D-38-FA', netmask=None,...]
'無線網(wǎng)絡(luò)連接 40':[snicaddr(family=<AddressFamily.AF_LINK: -1>,...]
'無線網(wǎng)絡(luò)連接 39':[...]
...
}
psutil.net_if_stats()
獲取網(wǎng)絡(luò)接口狀態(tài):
>>>psutil.net_if_stats()
{
'本地連接 2': snicstats(isup=False, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed=0, mtu=1500)葱跋,
'無線網(wǎng)絡(luò)連接 40': snicstats(isup=False, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed=0, mtu=1500),
'無線網(wǎng)絡(luò)連接 39': snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed=225, mtu=1500),
...
}
psutil.net_connections()
獲取當(dāng)前網(wǎng)絡(luò)連接信息:
>>>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)
]
注:你可能會(huì)得到一個(gè)AccessDenied錯(cuò)誤,原因是psutil獲取信息也是要走系統(tǒng)接口源梭,而獲取網(wǎng)絡(luò)連接信息需要root權(quán)限娱俺,這種情況下,可以退出Python交互環(huán)境废麻,用sudo重新啟動(dòng)
獲取進(jìn)程信息
psutil.pids()
獲取所有進(jìn)程ID:
>>>psutil.pids()
[0, 4, 312, 488, 540, 556, 596, 612, 620,..荠卷,11440, 8924]
獲取具體進(jìn)程的相關(guān)信息:
>>> p = psutil.Process(11232) # 獲取指定進(jìn)程ID=11232,該進(jìn)程是python.exe
>>> p.name() # 進(jìn)程名稱
'python.exe '
>>> p.exe() # 進(jìn)程exe路徑
'D:\program files (x86)\Python37\python.exe '
>>> p.cwd() # 進(jìn)程工作目錄
'C:\Users\Administrator '
>>> p.cmdline() # 進(jìn)程啟動(dòng)的命令行
['python']
>>> p.ppid() # 父進(jìn)程ID
10284
>>> p.parent() # 父進(jìn)程
psutil.Process(pid=10284, name='cmd.exe', started='15:48:27')
>>> p.children() # 子進(jìn)程列表
[]
>>> p.status() # 進(jìn)程狀態(tài)
'running'
>>> p.username() # 進(jìn)程用戶名
'MS-20170504FUSX\Administrator '
>>> p.create_time() # 進(jìn)程創(chuàng)建時(shí)間
1535960910.0
>>> p.cpu_times() # 進(jìn)程使用的CPU時(shí)間
pcputimes(user=0.046800299999999996, system=0.062400399999999995, children_user=0.0, children_system=0.0)
>>> p.memory_info() # 進(jìn)程使用的內(nèi)存
pmem(rss=13094912, vms=8167424,..., private=8167424)
>>> p.open_files() # 進(jìn)程打開的文件
[popenfile(path='C:\\Windows\\System32\\zh-CN\\kernel32.dll.mui', fd=-1), ...]
>>> p.connections() # 進(jìn)程相關(guān)網(wǎng)絡(luò)連接
[]
>>> p.num_threads() # 進(jìn)程的線程數(shù)量
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() # 進(jìn)程環(huán)境變量
{'ALLUSERSPROFILE': 'C:\\ProgramData', 'APPDATA': 'C:\\Users\\Administrator\\AppData\\Roaming', 'ASL.LOG': 'Destination=file', ...}
>>> p.terminate() # 結(jié)束進(jìn)程
注:和獲取網(wǎng)絡(luò)連接類似烛愧,獲取一個(gè)root用戶的進(jìn)程需要root權(quán)限油宜,啟動(dòng)Python交互環(huán)境或者.py文件時(shí)掂碱,需要sudo權(quán)限。
psutil還提供了一個(gè)test()
函數(shù)慎冤,可以模擬出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
...
小結(jié)
psutil模塊的功能十分強(qiáng)大疼燥,可以獲取CPU、內(nèi)存蚁堤、磁盤醉者、網(wǎng)絡(luò)等等系統(tǒng)信息。
psutil還有其他更多的功能披诗,如獲取用戶撬即、Windows服務(wù)等信息,具體請參考psutil的官網(wǎng)
以上就是本節(jié)的全部內(nèi)容呈队,感謝你的閱讀搞莺。
下一節(jié)內(nèi)容:常用第三方模塊之 virtualenv
有任何問題與想法,歡迎評(píng)論與吐槽掂咒。
和博主一起學(xué)習(xí)Python吧( ̄▽ ̄)~*