Psutil(進程和系統實用程序)是一個跨平臺的庫,用於在Python中檢索有關運行進程和系統資源利用率(CPU,內存,磁盤,網絡)的信息。它主要用於系統監視,分析和限制系統資源及運行進程的管理。它實現了Linux命令工具提供的許多功能,例如:ps,top,lsof,netstat,ifconfig,who,df,kill,nice,ionice,iostat,iotop,uptime,pidos,tty,tasket,pmap等。psutil目前支持如下平臺:linux、Windows、OSX、FreeBSD,OpenBSD、NETBSD、sun Solaris、AIX操做系統。因此是python實現系統運維不可或缺的模塊。python
官方下載地址:https://pypi.org/linux
psutil模塊安裝:https://github.com/giampaolo/psutilios
我這裏使用windows10系統,pip install psutil安裝git
具體使用:github
一.系統管理windows
1.查看cpu信息緩存
psutil.cpu_times()
參數介紹:網絡
2.顯示cpu全部邏輯信息運維
psutil.cpu_times(percpu=True)
3.查看用戶的cpu時間比socket
psutil.cpu_times().user
4.查看cpu邏輯個數
psutil.cpu_count()
5.查看cpu物理個數
psutil.cpu_count(logical=False)
-----------------------------------------------
6.查看系統內存
mem = psutil.virtual_memory() //系統內存全部信息
mem.total //系統總計內存
mem.used //系統已經使用內存
mem.free //系統空閒內存
mem.active //系統正在使用的內存和最近使用內存
mem.inactive //系統已經分配的內存,但尚未使用的
mem.shared //系統共享的內存
mem.buffers //系統緩衝區內存
mem.cached //系統cpu緩存空間,存放常用的數據
7.獲取swap交換內存信息
psutil.swap_memory()
----------------------------------------------
8.讀取磁盤參數
磁盤IO信息包括
read_count(讀IO數),
write_count(寫IO數)
read_bytes(IO寫字節數),
read_time(磁盤讀時間),
write_time(磁盤寫時間)
9.獲取分區信息
psutil.disk_partitions()
10.獲取指定分區的信息
psutil.disk_usage('/') #獲取/分區的狀態
11.獲取磁盤總的IO詳情
psutil.disk_io_counters()
12.獲取單個分區IO個數
psutil.disk_io_counters(perdisk=True) #perdisk=True參數獲取單個分區IO個數
13.讀取網絡信息
網絡信息與磁盤IO信息相似,涉及到幾個關鍵點,包括
byes_sent(發送字節數),
byte_recv=xxx(接受字節數),
pack-ets_sent=xxx(發送字節數),
pack-ets_recv=xxx(接收數據包數),這些網絡信息用
獲取網絡總IO信息
psutil.net_io_counters()
14.輸出網絡每一個接口信息
psutil.net_io_counters(pernic=True) #pernic=True
15.獲取當前系統用戶登錄信息
psutil.users()
16.獲取系統開機時間
psutil.boot_time() #以linux時間格式返回
17.將獲取到的時間轉換成可視時間
import datetime
datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d %H: %M: %S")
二.系統進程管理
列出全部的進程信息:
>>> res = psutil.process_iter() >>> for i in res: ... print(i)
1.列出系統全部進程的ID
psutil.pids()
2.獲取某一進程的信息,參數爲pid
psutil.Process(pid)
3.獲取指定進程的名稱
psutil.Process(pid).name()
4.獲取指定進程的執行命令的路徑
psutil.Process(pid).exe()
5.獲取指定進程的工做路徑的絕對路徑
psutil.Process(pid).cwd()
6.獲取進程的狀態
psutil.Process(pid).status()
7.進程建立時間
psutil.Process(pid).create_time()
8.以可視的方式顯示建立進程的時間
datetime.datetime.fromtimestamp(psutil.Process(pid).create_time()).strftime("%Y-%m-%d %H: %M: %S")
9.獲取指定進程的uid信息
psutil.Process(pid).uids()
10.獲取指定進程的gid信息
psutil.Process(pid).gids()
11.獲取指定進程的cpu時間信息,包括user,system
psutil.Process(pid).cpu_times()
12.獲取進程cpu的親和度
psutil.Process(pid).cpu_affinity()
13.進程內存的利用率
psutil.Process(pid).memory_percent()
14.進程內存的rss和vms的值
psutil.Process(pid).memory_info()
15.指定進程的IO數,包括讀寫IO數及字節數
psutil.Process(pid).io_counters()
16.返回打開進程的socket的namedutples列表,包括(fs,family,laddr)等信息
psutil.Process(pid).connections()
17.指定進程開啓的線程數
psutil.Process(pid).num_threads()
-------------------------------------------------------
18.popen類的使用
from subprocess import PIPE P = psutil.Popen(["/usr/bin/python","-c","print('hello')"],stdout=PIPE) 執行系統中的命令,非交互,而且輸出。
>>> P.name()
'python'
>>> P.username()
'root'
>>> P.communicate()
('hello\n', None)