凌峰创科服务平台

python获取服务器信息

Python作为一种功能强大且灵活的编程语言,在服务器信息获取方面具有显著优势,通过调用系统命令、使用标准库或第三方模块,开发者可以高效地收集服务器的硬件、系统、网络及进程等多维度信息,以下将详细介绍几种常用的方法及其实现细节。

通过系统命令获取服务器信息

Python的subprocess模块允许执行系统命令并获取输出结果,这是获取服务器信息的直接方式,不同操作系统(如Linux、Windows)的命令存在差异,需针对性处理。

Linux系统信息

在Linux环境下,可通过以下命令获取关键信息:

  • CPU信息cat /proc/cpuinfo,包含处理器型号、核心数、频率等。
  • 内存信息free -hcat /proc/meminfo,显示总内存、已用内存、交换分区等。
  • 磁盘信息df -h展示各分区的使用情况,lsblk列出块设备信息。
  • 网络信息ip addr显示网络接口及IP地址,netstat -tuln查看监听端口。

示例代码:

import subprocess
def get_cpu_info():
    result = subprocess.run(['cat', '/proc/cpuinfo'], capture_output=True, text=True)
    return result.stdout
def get_memory_info():
    result = subprocess.run(['free', '-h'], capture_output=True, text=True)
    return result.stdout
print("CPU信息:", get_cpu_info())
print("内存信息:", get_memory_info())

Windows系统信息

Windows系统可通过wmic命令行工具获取信息:

  • CPU信息wmic cpu get Name,NumberOfCores,MaxClockSpeed
  • 内存信息wmic OS get TotalVisibleMemorySize,FreePhysicalMemory
  • 磁盘信息wmic logicaldisk get size,freespace,caption

示例代码:

def get_windows_cpu_info():
    result = subprocess.run(['wmic', 'cpu', 'get', 'Name,NumberOfCores'], capture_output=True, text=True)
    return result.stdout
print("Windows CPU信息:", get_windows_cpu_info())

使用Python标准库获取信息

Python标准库提供了跨平台的接口,无需依赖系统命令,适合需要可移植性的场景。

platform模块

用于获取操作系统、处理器、Python版本等基础信息:

import platform
print("操作系统:", platform.system())
print("处理器:", platform.processor())
print("架构:", platform.machine())

psutil模块(第三方库,需安装)

psutil是跨平台的系统监控库,功能强大,可获取CPU、内存、磁盘、网络等实时数据,安装命令:pip install psutil

示例代码:

import psutil
# CPU信息
cpu_percent = psutil.cpu_percent(interval=1)
cpu_count = psutil.cpu_count(logical=False)
# 内存信息
memory = psutil.virtual_memory()
swap = psutil.swap_memory()
# 磁盘信息
disk_usage = psutil.disk_usage('/')
disk_io = psutil.disk_io_counters()
# 网络信息
net_io = psutil.net_io_counters()
connections = psutil.net_connections()
print(f"CPU使用率: {cpu_percent}%")
print(f"物理核心数: {cpu_count}")
print(f"内存总容量: {memory.total / (1024**3):.2f} GB")
print(f"磁盘使用率: {disk_usage.percent}%")

服务器信息分类与表格展示

为更直观地展示服务器信息,可将其分类并整理为表格,以下为常见信息类别及获取方法:

信息类别 获取方法(Linux示例) Python实现方式
系统信息 操作系统版本、内核版本 uname -a platform.system()platform.release()
CPU信息 型号、核心数、频率 cat /proc/cpuinfo psutil.cpu_info()platform.processor()
内存信息 总内存、已用内存、交换分区 free -h psutil.virtual_memory()
磁盘信息 分区大小、使用率、I/O统计 df -hiostat -x psutil.disk_usage()psutil.disk_io_counters()
网络信息 IP地址、端口监听、流量统计 ip addrnetstat -tuln psutil.net_io_counters()psutil.net_connections()
进程信息 进程ID、CPU占用、内存占用 ps aux psutil.process_iter()

高级应用:服务器信息监控与报告

结合定时任务和日志功能,可实现服务器信息的持续监控,使用schedule库定时采集数据并生成报告:

import schedule
import time
import logging
logging.basicConfig(filename='server_monitor.log', level=logging.INFO)
def monitor_server():
    cpu = psutil.cpu_percent()
    memory = psutil.virtual_memory().percent
    disk = psutil.disk_usage('/').percent
    logging.info(f"CPU: {cpu}%, Memory: {memory}%, Disk: {disk}%")
schedule.every(5).minutes.do(monitor_server)
while True:
    schedule.run_pending()
    time.sleep(1)

相关问答FAQs

Q1: 如何区分物理CPU核心数和逻辑CPU核心数?
A1: 物理核心数指实际处理器芯片的核心数量,逻辑核心数包括超线程技术虚拟的核心,在Python中,可通过psutil.cpu_count(logical=False)获取物理核心数,psutil.cpu_count(logical=True)获取逻辑核心数,Linux下也可通过cat /proc/cpuinfo | grep "processor" | wc -l统计逻辑核心数,cat /proc/cpuinfo | grep "cores" | head -n 1获取每个物理核心的线程数。

Q2: 如何获取服务器上正在运行的特定进程信息?
A2: 可通过psutil.process_iter()遍历所有进程,筛选目标进程,查找名为"nginx"的进程:

for proc in psutil.process_iter(['name', 'pid', 'cpu_percent']):
    if proc.info['name'] == 'nginx':
        print(f"进程名: {proc.info['name']}, PID: {proc.info['pid']}, CPU: {proc.info['cpu_percent']}%")

Windows系统下可结合wmic process where name="nginx" call get ProcessId,CommandLine实现类似功能。

分享:
扫描分享到社交APP
上一篇
下一篇