Python psutil模塊


用Python來編寫腳本簡化日常的運維工作是Python的一個重要用途。在Linux下,有許多系統命令可以讓我們時刻監控系統運行的狀態,如ps,top,free等等。要獲取這些系統信息,Python可以通過subprocess模塊調用並獲取結果。但這樣做顯得很麻煩,尤其是要寫很多解析代碼。

在Python中獲取系統信息的另一個好辦法是使用psutil這個第三方模塊。顧名思義,psutil = process and system utilities,它不僅可以通過一兩行代碼實現系統監控,還可以跨平台使用,支持Linux/UNIX/OSX/Windows等,是系統管理員和運維小伙伴不可或缺的必備模塊。

安裝psutil

如果安裝了Anaconda,psutil就已經可用了。否則,需要在命令行下通過pip安裝:

pip install psutil

如果遇到Permission denied安裝失敗,請加上sudo重試。

獲取CPU信息

import psutil
psutil.cpu_count() # CPU邏輯數量
psutil.cpu_count(logical=False) # CPU物理核心
# 2說明是雙核超線程, 4則是4核非超線程

統計CPU的用戶/系統/空閑時間:

import psutil
psutil.cpu_times()

再實現類似top命令的CPU使用率,每秒刷新一次,累計10次:

for x in range(10):
    psutil.cpu_percent(interval=1, percpu=True)

獲取內存信息

使用psutil獲取物理內存和交換內存信息,分別使用:

psutil.virtual_memory()
psutil.swap_memory()

返回的是字節為單位的整數,可以看到,總內存大小是8589934592 = 8 GB,已用7201386496 = 6.7 GB,使用了66.6%。

獲取磁盤信息

以通過psutil獲取磁盤分區、磁盤使用率和磁盤IO信息:

psutil.disk_partitions() # 磁盤分區信息
psutil.disk_usage('/') # 磁盤使用情況
psutil.disk_io_counters() # 磁盤IO

可以看到,磁盤'/'的總容量是998982549504 = 930 GB,使用了39.1%。文件格式是HFS,opts中包含rw表示可讀寫,journaled表示支持日志。

獲取網絡信息

psutil可以獲取網絡接口和網絡連接信息:

psutil.net_io_counters() # 獲取網絡讀寫字節/包的個數
psutil.net_if_addrs() # 獲取網絡接口信息
psutil.net_if_stats() # 獲取網絡接口狀態

要獲取當前網絡連接信息,使用net_connections():

psutil.net_connections()

你可能會得到一個AccessDenied錯誤,原因是psutil獲取信息也是要走系統接口,而獲取網絡連接信息需要root權限,這種情況下,可以退出Python交互環境,用sudo重新啟動:

#sudo python3
import psutil
psutil.net_connections()

獲取進程信息

通過psutil可以獲取到所有進程的詳細信息:

psutil.pids() # 所有進程ID
p = psutil.Process(3776) # 獲取指定進程ID=3776,其實就是當前Python交互環境

和獲取網絡連接類似,獲取一個root用戶的進程需要root權限,啟動Python交互環境或者.py文件時,需要sudo權限。

psutil還提供了一個test()函數,可以模擬出ps命令的效果:

$ sudo python3
Password: ******
Python 3.6.3 ... on darwin
Type "help", ... for more information.
>>> import psutil
>>> psutil.test()
USER         PID %MEM     VSZ     RSS TTY           START    TIME  COMMAND
root           0 24.0 74270628 2016380 ?             Nov18   40:51  kernel_task
root           1  0.1 2494140    9484 ?             Nov18   01:39  launchd
root          44  0.4 2519872   36404 ?             Nov18   02:02  UserEventAgent
root          45    ? 2474032    1516 ?             Nov18   00:14  syslogd
root          47  0.1 2504768    8912 ?             Nov18   00:03  kextd
root          48  0.1 2505544    4720 ?             Nov18   00:19  fseventsd
_appleeven    52  0.1 2499748    5024 ?             Nov18   00:00  appleeventsd
root          53  0.1 2500592    6132 ?             Nov18   00:02  configd
...


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM