Psutil 是一個 Python 跨平台庫,用於訪問係統詳細信息和進程實用程序。它用於跟蹤係統中各種資源的使用情況。可以監控CPU、內存、磁盤、網絡、傳感器等資源的使用情況。因此,該庫用於係統監視、分析、限製進程資源以及正在運行的進程的管理。 Python 版本 2.6、2.7 和 3.4+ 支持它。
Linux Ubuntu/Debian 中的安裝步驟
sudo pip install psutil
係統函數
CPU
1) psutil.cpu_times() - 該函數以命名元組的形式給出係統 CPU 時間。
參數:
- user - 在用戶模式下執行的正常進程所花費的時間
- system - 在內核模式下執行的進程所花費的時間
- 空閑 - 係統空閑的時間
- Nice - 在用戶模式下執行的優先進程所花費的時間
- iowait - 等待 I/O 完成所花費的時間。這不計入空閑時間計數器。
- irq - 服務硬件中斷所花費的時間
- softirq - 服務軟件中斷所花費的時間
- 竊取 - 在虛擬化環境中運行的其他操作係統所花費的時間
- guest - 在 Linux 內核的控製下為來賓操作係統運行虛擬 CPU 所花費的時間
例子:
Python
import psutil
print(psutil.cpu_times())
輸出
scputimes(user=5461.14, nice=2.44, system=1326.65, idle=45502.33, iowait=506.24, irq=0.0, softirq=5.46, steal=0.0, guest=0.0, guest_nice=0.0)
2) psutil.cpu_percent(interval) - 此函數以百分比形式計算當前 system-wide CPU 利用率。建議提供時間間隔(秒)作為函數的參數,以計算平均 CPU 使用率,忽略間隔參數可能會導致使用值的較大變化。
例子:
Python
import psutil
print(psutil.cpu_percent(1))
輸出
5.0
3) psutil.cpu_count(邏輯=True) - 該函數顯示係統中邏輯CPU的數量。邏輯核心的計算方式為物理核心數乘以每個核心上可以運行的線程數。在沒有邏輯核心的情況下,隻統計物理核心的數量。
例子:
Python
import psutil
print("Number of cores in system", psutil.cpu_count())
print("\nNumber of physical cores in system",)
輸出:
Number of cores in system 4 Number of physical cores in system 2
4) psutil.cpu_stats() - 該函數以命名元組的形式提供 CPU 統計信息。統計數據包括:
- ctx_switches - 自啟動以來上下文切換的次數。
- 中斷 - 自啟動以來的中斷次數。
- soft_interrupts - 自啟動以來軟件中斷的次數。
- syscalls - 自啟動以來的係統調用次數。在 Ubuntu 中始終設置為 0。
例子:
Python
import psutil
print("CPU Statistics", psutil.cpu_stats())
scpustats(ctx_switches=37382771, interrupts=13744347, soft_interrupts=6769413, syscalls=0)
5) psutil.cpu_freq() - 該函數以元組形式給出 CPU 頻率,其中包括以 Mhz 表示的當前、最小和最大頻率。在 Ubuntu 上,當前頻率報告實時值。而在所有其他平台上,它代表名義上的 “fixed” 值。
例子:
Python
import psutil
print(psutil.cpu_freq())
輸出:
scpufreq(current=931.42925, min=400.0, max=2000.0)
6) psutil.getloadavg() - 該函數以元組形式給出最近 1、5 和 15 分鍾的平均係統負載。負載表示處於可運行狀態的進程,或者正在使用 CPU,或者正在等待使用 CPU(例如等待磁盤 I/O)。
例子:
Python
import psutil
print(psutil.getloadavg())
輸出:
(0.22, 0.33, 0.35)
memory
1) psutil.virtual_memory() - 該函數給出係統內存使用情況(以字節為單位)。已用和可用的總和可能等於也可能不等於總計。為了獲取可用物理內存的詳細信息,使用此函數。
參數:
- 總計 - 不包括交換區的總物理內存。
- 可用 - 可以立即分配給進程而無需係統進入交換的內存。
- 已使用 - 已使用的內存。
- free - 內存未使用且隨時可用
- active - 當前正在使用或最近使用的內存。
- 非活動 - 標記為未使用的內存。
- 緩衝區 - 緩存數據,例如文件係統元數據。
- 緩存-緩存數據
- 共享 - 可由多個進程訪問的內存。
例子:
Python
import psutil
print(psutil.virtual_memory())
輸出:
svmem(total=4028772352, available=1061466112, percent=73.7, used=2401546240, free=412352512, active=2176798720, inactive=1196470272, buffers=70774784, cached=1144098816, shared=313872384, slab=125116416)
2) psutil.swap_memory() - 該函數以元組形式提供交換內存統計信息的詳細信息。
參數:
- Total - 總交換內存(以字節為單位)
- used - 已使用的交換內存(以字節為單位)
- free - 可用交換內存(以字節為單位)
- 百分比 - 使用百分比,計算公式為(總計 - 可用)/總計 * 100
- sin - 係統從磁盤換入的字節數
- sout - 係統從磁盤換出的字節數
例子:
Python
import psutil
print(psutil.swap_memory())
輸出:
sswap(total=2097147904L, used=886620160L, free=1210527744L, percent=42.3, sin=1050411008, sout=1906720768)
磁盤
1) psutil.disk_partitions() - 此函數以元組列表的形式提供所有已安裝磁盤分區的詳細信息,包括設備、安裝點和文件係統類型。
例子:
Python
import psutil
print(psutil.disk_partitions())
輸出:
[sdiskpart(device=’/dev/sda1′, mountpoint=’/’, fstype=’ext4′, opts=’rw, relatime, errors=remount-ro, data=ordered’)]
2) psutil.disk_usage(path) - 此函數以給定路徑的元組形式提供磁盤使用統計信息。總空間、已用空間和可用空間以及使用百分比以字節表示。
例子:
Python
import psutil
print(psutil.disk_usage('/'))
輸出:
sdiskusage(total=787310764032, used=26450710528, free=720843354112, percent=3.5)
網絡
1) psutil.net_io_counters()- 該函數以元組形式提供網絡輸入輸出統計信息的詳細信息。
參數:
- bytes_sent - 發送的字節數
- bytes_recv - 收到的字節數
- packets_sent - 發送的數據包數量
- packets_recv - 收到的數據包數量
- errin - 接收時的錯誤總數
- errout - 發送時的錯誤總數
- dropin - 被丟棄的傳入數據包總數
- dropout - 被丟棄的傳出數據包總數
例子:
Python
import psutil
print(psutil.net_io_counters())
輸出:
snetio(bytes_sent=14508483, bytes_recv=62749361, packets_sent=84311, packets_recv=94888, errin=0, errout=0, dropin=0, dropout=0)
2) psutil.net_connections() - 該函數以命名元組的形式給出係統的套接字連接列表。
參數:
- fd - 套接字文件說明符。
- family - 套接字係列,AF_INET、AF_INET6 或AF_UNIX。
- type - 套接字類型,SOCK_STREAM、SOCK_DGRAM 或 SOCK_SEQPACKET。
- laddr - 作為(ip,端口)命名元組的本地地址
- raddr - 作為(ip,端口)命名元組的遠程地址
- status - 表示 TCP 連接的狀態。
- pid - 打開套接字的進程的 PID(如果可檢索),否則無。
例子:
Python
import psutil
print(psutil.net_connections())
輸出:
[sconn(fd=118, family=2, type=1, laddr=addr(ip=’192.168.12.184′, port=59666), raddr=addr(ip=’172.217.166.42′, port=443), status=’ESTABLISHED’, pid=2428),
sconn(fd=-1, family=2, type=2, laddr=addr(ip=’0.0.0.0′, port=631), raddr=(), status=’NONE’, pid=None),
sconn(fd=-1, family=2, type=1, laddr=addr(ip=’127.0.0.1′, port=3306), raddr=(), status=’LISTEN’, pid=None),
sconn(fd=145, family=2, type=1, laddr=addr(ip=’192.168.12.184′, port=56568), raddr=addr(ip=’172.217.166.35′, port=443), status=’ESTABLISHED’, pid=2428),
sconn(fd=-1, family=2, type=2, laddr=addr(ip=’0.0.0.0′, port=52253), raddr=(), status=’NONE’, pid=None)]
3) psutil.net_if_addrs() - 該函數用於獲取係統上安裝的每個網絡接口卡的地址。它是一個字典,其鍵是網絡接口卡名稱,值是分配給它的每個地址的命名元組列表。每個元組包括:
- family - 套接字係列,AF_INET 或 AF_INET6
- 地址 - 主 NIC 地址
- 網絡掩碼 - 網絡掩碼地址
- 廣播 - 廣播地址。
- ptp - “point to point” 它是點對點接口上的目標地址。
例子:
Python
import psutil
print(psutil.net_if_addrs())
輸出:
{‘wlo1′: [snicaddr(family=2, address=’192.168.12.184′, netmask=’255.255.255.0′, broadcast=’192.168.12.255′, ptp=None), snicaddr(family=10, address=’fe80::664f:767c:91f0:71c0%wlo1′, netmask=’ffff:ffff:ffff:ffff::’, broadcast=None, ptp=None), snicaddr(family=17, address=’3c:f8:62:32:b7:70′, netmask=None, broadcast=’ff:ff:ff:ff:ff:ff’, ptp=None)], ‘lo’: [snicaddr(family=2, address=’127.0.0.1′, netmask=’255.0.0.0′, broadcast=None, ptp=None), snicaddr(family=10, address=’::1′, netmask=’ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff’, broadcast=None, ptp=None), snicaddr(family=17, address=’00:00:00:00:00:00′, netmask=None, broadcast=None, ptp=None)], ‘docker0′: [snicaddr(family=2, address=’172.17.0.1′, netmask=’255.255.0.0′, broadcast=’172.17.255.255′, ptp=None), snicaddr(family=17, address=’02:42:ef:4c:3b:d9′, netmask=None, broadcast=’ff:ff:ff:ff:ff:ff’, ptp=None)], ‘eno1′: [snicaddr(family=17, address=’3c:52:82:09:8e:c2′, netmask=None, broadcast=’ff:ff:ff:ff:ff:ff’, ptp=None)]}
傳感器
1) psutil.sensors_temperatures()- 該函數返回係統的硬件溫度(以攝氏度為單位)。每個條目都是代表特定硬件溫度傳感器的命名元組。
例子:
Python
import psutil
print(psutil.sensors_temperatures())
輸出:
{‘acpitz’: [shwtemp(label=”, current=27.8, high=119.0, critical=119.0), shwtemp(label=”, current=29.8, high=119.0, critical=119.0), shwtemp(label=”, current=10.0, high=None, critical=None)], ‘coretemp’: [shwtemp(label=’Physical id 0′, current=42.0, high=100.0, critical=100.0), shwtemp(label=’Core 0′, current=41.0, high=100.0, critical=100.0), shwtemp(label=’Core 1′, current=41.0, high=100.0, critical=100.0), shwtemp(label=’Physical id 0′, current=42.0, high=100.0, critical=100.0), shwtemp(label=’Core 0′, current=41.0, high=100.0, critical=100.0), shwtemp(label=’Core 1′, current=41.0, high=100.0, critical=100.0)]}
2) psutil.sensors_fans() - 此函數提供硬件風扇速度的詳細信息,以 RPM(每分鍾轉數)表示。如果操作係統不支持傳感器,則會返回空字典。
例子:
Python
import psutil
print(psutil.sensors_fans())
輸出:
{'asus': [sfan(label='cpu_fan', current=3000)]}
3) psutil.sensors_battery() - 該函數以命名元組的形式提供電池狀態信息。
參數:
- 百分比 - 剩餘電池電量的百分比。
- secsleft - 電池完全放電之前的大約時間(以秒為單位)。
- power_plugged - 如果已連接交流電源線,則為 True;如果未連接,則為 False。
例子:
Python
import psutil
print(psutil.sensors_battery())
輸出:
sbattery(percent=98.98572501878287, secsleft=22913, power_plugged=False)
其他係統信息
1) psutil.boot_time() - 該函數返回係統啟動時間,以自紀元以來的秒數表示。
例子:
Python
import psutil, datetime
print(psutil.boot_time())
輸出:
1582860765.0
2) psutil.users() - 該函數以命名元組的形式給出連接到係統的用戶列表。
參數:
- user - 這是用戶的係統名稱。
- 終端 - 用戶的 tty。
- 主機 - 用戶的主機名。
- 開始 - 以浮點數表示的創建時間,以自紀元以來的秒數表示。
- pid - 登錄進程的PID。
例子:
Python
import psutil
print(psutil.users())
輸出:
[suser(name=’admin1′, terminal=’tty7′, host=’localhost’, started=1582860800.0, pid=1747)]
相關用法
- Python PIL ImageGrab.grab()用法及代碼示例
- Python PIL ImageGrab.grabclipboard()用法及代碼示例
- Python Pandas.apply()用法及代碼示例
- Python Pandas.Categorical()用法及代碼示例
- Python Pandas.CategoricalDtype()用法及代碼示例
- Python Pandas DataFrame.abs()用法及代碼示例
- Python Pandas dataframe.add()用法及代碼示例
- Python Pandas dataframe.add_prefix()用法及代碼示例
- Python Pandas dataframe.add_suffix()用法及代碼示例
- Python Pandas dataframe.aggregate()用法及代碼示例
- Python Pandas dataframe.all()用法及代碼示例
- Python Pandas dataframe.applymap()用法及代碼示例
- Python Pandas dataframe.asfreq()用法及代碼示例
- Python Pandas dataframe.assign()用法及代碼示例
- Python Pandas DataFrame.astype()用法及代碼示例
- Python Pandas Dataframe.at[ ]用法及代碼示例
- Python Pandas dataframe.at_time()用法及代碼示例
- Python Pandas DataFrame.axes用法及代碼示例
- Python Pandas dataframe.between_time()用法及代碼示例
- Python Pandas dataframe.bfill()用法及代碼示例
- Python Pandas DataFrame.blocks用法及代碼示例
- Python Pandas dataframe.clip()用法及代碼示例
- Python Pandas dataframe.clip_lower()用法及代碼示例
- Python Pandas dataframe.clip_upper()用法及代碼示例
- Python Pandas DataFrame.columns用法及代碼示例
注:本文由純淨天空篩選整理自rupanisweety大神的英文原創作品 Psutil module in Python。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。