Python跨平臺系統信息庫psutil

在這裏插入圖片描述

本文代碼

簡介

psutil (process and system utilities) 是一個跨平臺庫,用於檢索關於Python中運行進程和系統利用率(CPU、內存、磁盤、網絡、傳感器)的信息。

它主要用於系統監視、分析和限制進程資源以及管理正在運行的進程。

它實現了經典UNIX命令行工具(如ps、top、iotop、lsof、netstat、ifconfig、free等)提供的許多功能。

支持Python 2.6, 2.7 和 3.4+

當前支持系統有:

  • Linux
  • Windows
  • macOS
  • FreeBSD, OpenBSD, NetBSD
  • Sun Solaris
  • AIX




安裝

Linux下安裝需要root權限

pip install psutil




CPU

import psutil

print(psutil.cpu_times())  # CPU時間

for x in range(3):
    print(psutil.cpu_percent(interval=1))  # CPU利用率,間隔1s

for x in range(3):
    print(psutil.cpu_percent(interval=1, percpu=True))  # 每個CPU的利用率

for x in range(3):
    print(psutil.cpu_times_percent(interval=1, percpu=False))  # 同cpu_percent(),並給出CPU時間

print(psutil.cpu_count())  # 邏輯CPU數量
print(psutil.cpu_count(logical=False))  # 物理CPU數量

print(psutil.cpu_stats())  # CPU狀態:上下文切換次數、中斷數、軟件中斷數、系統調用數

print(psutil.cpu_freq())  # CPU頻率

print(psutil.getloadavg())  # 平均系統負載(最近1/5/15分鐘)




內存

import psutil

print(psutil.virtual_memory())  # 內存情況

print(psutil.swap_memory())  # 交換內存情況




磁盤

import psutil

print(psutil.disk_partitions())  # 已掛載的磁盤分區,類似UNIX的df命令

print(psutil.disk_usage('C:/'))  # 給定路徑分區的磁盤情況

print(psutil.disk_io_counters(perdisk=False))  # 磁盤I/O情況




網絡

需要root權限

import psutil

print(psutil.net_io_counters(pernic=True))  # 網絡I/O情況

print(psutil.net_connections())  # 套接字連接

print(psutil.net_if_addrs())  # 網絡接口,網卡關聯地址

print(psutil.net_if_stats())  # 網卡信息




傳感器

僅Linux和FreeBSD可用

import psutil

print(psutil.sensors_temperatures())  # 硬件溫度

print(psutil.sensors_fans())  # 硬件風扇速度

print(psutil.sensors_battery())  # 電池狀態




其他系統信息

import psutil

print(psutil.boot_time())  # 系統啓動時間

print(psutil.users())  # 當前連接在系統上的用戶




進程

import psutil
import random

print(psutil.pids())  # 當前運行的pid排序列表

p = random.choice(psutil.pids())  # 隨機挑一個進程出來
p = psutil.Process(p)
print(p)

print(p.name())  # 進程名

print(p.exe())  # 進程完整路徑

print(p.cwd())  # 進程所在路徑

print(p.cmdline())  # 進程命令

print(p.pid)  # 進程ID

print(p.ppid())  # 父進程ID

print(p.children(recursive=True))  # 遞歸查看子進程

print(p.parent())  # 父進程(對象形式)

print(p.parents())  # 父進程(列表形式)

print(p.status())  # 運行狀態

print(p.username())  # 用戶名

print(p.create_time())  # 創建時間

# print(p.terminal())  # 進程的終端

# print(p.uids())  # 用戶ID

# print(p.gids())  # 用戶組ID

print(p.cpu_times())  # 累計進程時間

print(p.cpu_percent(interval=1.0))  # CPU利用率

print(p.cpu_affinity())  # 關聯的CPU

# print(p.cpu_affinity([0, 1]))  # 設置關聯的CPU

# print(p.cpu_num())  # 進程運行的CPU

print(p.memory_info())  # 進程的內存信息

print(p.memory_full_info())  # 進程的完整內存信息

print(p.memory_percent())  # 內存利用率

print(p.memory_maps())  # 進程映射的內存區域

print(p.io_counters())  # IO統計信息

print(p.open_files())  # 打開的文件

print(p.connections())  # 套接字連接

print(p.num_threads())  # 使用的線程數

# print(p.num_fds())  # 打開的文件描述符數量

print(p.threads())  # 進程打開的線程

print(p.num_ctx_switches())  # 進程的上下文切換數量

print(p.nice())  # 進程優先級

# print(p.nice(10))  # 設置進程優先級

print(p.ionice())  # IO優先級

# print(p.ionice(psutil.IOPRIO_CLASS_IDLE))  # 設置IO優先級

# print(p.rlimit(psutil.RLIMIT_NOFILE, (5, 5)))  # 設置資源限制

# print(p.rlimit(psutil.RLIMIT_NOFILE))  # 設置資源限制

print(p.environ())  # 進程的環境變量

print(p.as_dict())  # 字典形式的進程信息

print(p.is_running())  # 進程是否正在運行

# print(p.suspend())  # 用SIGSTOP預先檢查PID是否被重用來暫停進程。在Windows上將掛起所有進程線程

# print(p.resume())  # 用SIGSTOP預先檢查PID是否被重用來恢復進程。在Windows上將恢復所有進程線程

# print(p.terminate())  # 用SIGTERM預先檢查PID是否被重用來終止進程。在Windows上相當於kill

# print(p.kill())  # 用SIGTERM預先檢查PID是否被重用來殺死當前進程

# print(p.wait(timeout=3))  # 等待進程終止




更多進程API

import psutil

for proc in psutil.process_iter(['pid', 'name']):  # 生成器
    print(proc.info)

print(psutil.pid_exists(3))  # 進程ID爲3是否存在




Windows服務

import psutil

print(list(psutil.win_service_iter()))  # 所有Windows服務

s = psutil.win_service_get('alg')  # 某個服務
print(s.as_dict())




參考文獻

  1. psutil: Cross-platform lib for process and system monitoring in Python
  2. psutil documentation
  3. psutil | pypi via the Tidelift Subscription
  4. psutil - 廖雪峯的官方網站
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章