Python提供了多种方式来获取Linux系统信息,下面我将详细介绍几种常用的方法。
import os
# 获取系统名称
print(os.name) # 通常返回'posix'表示Linux/Unix系统
# 获取环境变量
print(os.environ) # 所有环境变量
print(os.getenv('PATH')) # 特定环境变量
# 获取CPU核心数
print(os.cpu_count())
# 获取当前用户
print(os.getlogin())
# 获取进程ID
print(os.getpid())
import platform
# 系统信息
print(platform.system()) # 操作系统名称
print(platform.release()) # 内核版本
print(platform.version()) # 系统版本信息
print(platform.machine()) # 机器架构
print(platform.node()) # 主机名
# Python相关信息
print(platform.python_version())
print(platform.python_compiler())
import subprocess
def get_system_info():
# 获取内存信息
mem_info = subprocess.check_output(['free', '-m']).decode()
print("内存信息:\n", mem_info)
# 获取磁盘信息
disk_info = subprocess.check_output(['df', '-h']).decode()
print("磁盘信息:\n", disk_info)
# 获取CPU信息
cpu_info = subprocess.check_output(['lscpu']).decode()
print("CPU信息:\n", cpu_info)
# 获取uptime
uptime = subprocess.check_output(['uptime']).decode()
print("系统运行时间:\n", uptime)
# 获取网络信息
net_info = subprocess.check_output(['ifconfig']).decode()
print("网络信息:\n", net_info)
get_system_info()
psutil是一个跨平台库,可以方便地获取系统信息:
import psutil
# CPU信息
print("CPU逻辑数量:", psutil.cpu_count())
print("CPU物理核心:", psutil.cpu_count(logical=False))
print("CPU使用率:", psutil.cpu_percent(interval=1))
# 内存信息
mem = psutil.virtual_memory()
print("总内存:", mem.total/1024/1024, "MB")
print("可用内存:", mem.available/1024/1024, "MB")
print("内存使用率:", mem.percent, "%")
# 磁盘信息
disk = psutil.disk_usage('/')
print("磁盘总空间:", disk.total/1024/1024/1024, "GB")
print("磁盘使用率:", disk.percent, "%")
# 网络信息
net = psutil.net_io_counters()
print("发送字节数:", net.bytes_sent/1024/1024, "MB")
print("接收字节数:", net.bytes_recv/1024/1024, "MB")
# 进程信息
for proc in psutil.process_iter(['pid', 'name', 'username']):
print(proc.info)
Linux的/proc文件系统包含了丰富的系统信息:
def read_proc_files():
# CPU信息
with open('/proc/cpuinfo', 'r') as f:
cpuinfo = f.read()
print("CPU信息:\n", cpuinfo)
# 内存信息
with open('/proc/meminfo', 'r') as f:
meminfo = f.read()
print("内存信息:\n", meminfo)
# 系统版本
with open('/proc/version', 'r') as f:
version = f.read()
print("系统版本:\n", version)
# 系统负载
with open('/proc/loadavg', 'r') as f:
loadavg = f.read()
print("系统负载:\n", loadavg)
read_proc_files()
import distro
print("ID:", distro.id())
print("名称:", distro.name())
print("版本:", distro.version())
print("版本代号:", distro.codename())
print("信息:", distro.info())
import GPUtil
gpus = GPUtil.getGPUs()
for gpu in gpus:
print(f"GPU ID: {gpu.id}, 名称: {gpu.name}")
print(f"负载: {gpu.load*100}%")
print(f"显存使用: {gpu.memoryUsed}MB / {gpu.memoryTotal}MB")
import os
import platform
import psutil
import time
import datetime
def system_monitor():
print("\n" + "="*50)
print(f"系统监控 - {datetime.datetime.now()}")
print("="*50)
# 系统基本信息
print("\n[系统基本信息]")
print(f"操作系统: {platform.system()} {platform.release()}")
print(f"主机名: {platform.node()}")
print(f"架构: {platform.machine()}")
print(f"处理器: {platform.processor()}")
# CPU信息
print("\n[CPU信息]")
print(f"物理核心数: {psutil.cpu_count(logical=False)}")
print(f"逻辑核心数: {psutil.cpu_count()}")
print(f"当前使用率: {psutil.cpu_percent(interval=1)}%")
# 内存信息
print("\n[内存信息]")
mem = psutil.virtual_memory()
print(f"总内存: {mem.total/1024/1024:.2f} MB")
print(f"可用内存: {mem.available/1024/1024:.2f} MB")
print(f"使用率: {mem.percent}%")
# 磁盘信息
print("\n[磁盘信息]")
partitions = psutil.disk_partitions()
for partition in partitions:
print(f"\n设备: {partition.device}")
print(f"挂载点: {partition.mountpoint}")
print(f"文件系统: {partition.fstype}")
try:
usage = psutil.disk_usage(partition.mountpoint)
print(f"总空间: {usage.total/1024/1024/1024:.2f} GB")
print(f"已用空间: {usage.used/1024/1024/1024:.2f} GB")
print(f"使用率: {usage.percent}%")
except PermissionError:
print("权限不足,无法读取")
# 网络信息
print("\n[网络信息]")
net_io = psutil.net_io_counters()
print(f"发送字节: {net_io.bytes_sent/1024/1024:.2f} MB")
print(f"接收字节: {net_io.bytes_recv/1024/1024:.2f} MB")
# 系统运行时间
print("\n[系统运行时间]")
boot_time = psutil.boot_time()
uptime = datetime.datetime.now() - datetime.datetime.fromtimestamp(boot_time)
print(f"系统启动时间: {datetime.datetime.fromtimestamp(boot_time)}")
print(f"已运行: {uptime}")
if __name__ == "__main__":
while True:
system_monitor()
time.sleep(5) # 每5秒刷新一次
以上方法可以根据实际需求组合使用,构建适合自己需求的系统监控工具。