psutil
原以為psutil只是跟進程有關的一個模塊,沒想到它其實提供了從CPU到內存各種各樣的信息,十分IMBA。記錄一下
我用了pip install psutil安裝的這個模塊,不過路中遇到了一個坑。原先的虛擬機環境中沒有安裝gcc所以編譯.c文件失敗。但是裝上之后依然安裝模塊失敗,后來去百度一下發現問題在於沒有安裝python-devel這個包。於是yum search了一下,安裝了python-devel.x86_64這個包后成功安裝。
■ 進程信息查看
第一次看到psutil就是用了模塊下的Process構建的進程對象。
首先是查看系統中目前的所有進程pid:
print psutil.pids()
返回一個列表,內容是當前所有進程的pid。在知道某個特定進程的pid之后,可以使用p = psutil.Process(pid)來得到一個進程對象。這個進程對象相比於subprocess.Popen給出的進程對象有更多的信息。如下:
p.name() #進程名 p.exe() #進程的bin路徑 p.cwd() #進程的工作目錄絕對路徑 p.status() #進程狀態 p.create_time() #進程創建時間 p.uids() #進程uid信息 p.gids() #進程的gid信息 p.cpu_times() #進程的cpu時間信息,包括user,system兩個cpu信息 p.cpu_affinity() #get進程cpu親和度,如果要設置cpu親和度,將cpu號作為參考就好 p.memory_percent() #進程內存利用率 p.memory_info() #進程內存rss,vms信息 p.io_counters() #進程的IO信息,包括讀寫IO數字及參數 p.connections() #返回進程對象的列表 p.num_threads() #進程開啟的線程數
p.username() #執行用戶的名
另外,psutil也封裝了Popen方法,使得進程對象可以跟蹤新開的進程。比如:
from subprocess import PIPE p = psutil.Popen(["/usr/bin/python", "-c", "print('hello')"],stdout=PIPE) print p.name() print p.username()
■ 獲取其他方面的系統信息
psutil.cpu_count() 返回cpu個數
psutil.cpu_times() 返回cpu使用時間信息對象,包括用戶時間,空轉時間等等。這些信息都是屬性,可以用.訪問
psutil.boot_time() 返回系統開機的時間
psutil.users() 返回用戶信息
psutil.net_io_counters() 網卡屬性,連接數,流量等信息
psutil.virtual_memory() 系統內存信息
psutil.swap_memory() swap內存信息
以上函數返回的都是一些對象,訪問對象的屬性可以進一步獲得更精細的信息。