Python作为一种功能强大且灵活的编程语言,在服务器信息获取方面具有显著优势,通过调用系统命令、使用标准库或第三方模块,开发者可以高效地收集服务器的硬件、系统、网络及进程等多维度信息,以下将详细介绍几种常用的方法及其实现细节。
通过系统命令获取服务器信息
Python的subprocess模块允许执行系统命令并获取输出结果,这是获取服务器信息的直接方式,不同操作系统(如Linux、Windows)的命令存在差异,需针对性处理。
Linux系统信息
在Linux环境下,可通过以下命令获取关键信息:
- CPU信息:
cat /proc/cpuinfo,包含处理器型号、核心数、频率等。 - 内存信息:
free -h或cat /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 -h、iostat -x |
psutil.disk_usage()、psutil.disk_io_counters() |
| 网络信息 | IP地址、端口监听、流量统计 | ip addr、netstat -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实现类似功能。
