插件窝 干货文章 细述使用 Python 获取 Linux 系统信息

细述使用 Python 获取 Linux 系统信息

print 信息 系统 1024 691    来源:    2025-05-19

使用Python获取Linux系统信息

Python提供了多种方式来获取Linux系统信息,下面我将详细介绍几种常用的方法。

1. 使用标准库模块

os 模块

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())

platform 模块

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())

2. 使用subprocess调用系统命令

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()

3. 使用psutil库

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)

4. 读取/proc文件系统

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()

5. 使用第三方库

使用distro获取发行版信息

import distro

print("ID:", distro.id())
print("名称:", distro.name())
print("版本:", distro.version())
print("版本代号:", distro.codename())
print("信息:", distro.info())

使用GPUtil获取GPU信息

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秒刷新一次

注意事项

  1. 许多系统信息获取操作需要root权限
  2. 不同Linux发行版可能有不同的命令和文件路径
  3. 生产环境中应考虑错误处理和异常捕获
  4. 频繁获取系统信息可能会影响系统性能

以上方法可以根据实际需求组合使用,构建适合自己需求的系统监控工具。