# -*- coding: utf-8 -*- """ 系统信息工具 提供系统信息采集功能。 """ import os import platform import subprocess from typing import Optional import psutil from constant import SOFTWARE_VERSION, DEFAULT_CAPABILITIES def get_sys_info(): """ 获取系统信息 Returns: dict: 系统信息字典 """ mem = psutil.virtual_memory() info = { 'os': platform.system(), 'cpu': f"{os.cpu_count()} cores", 'memory': f"{mem.total // (1024**3)}GB", 'cpuUsage': f"{psutil.cpu_percent()}%", 'memoryAvailable': f"{mem.available // (1024**3)}GB", 'platform': platform.system(), 'pythonVersion': platform.python_version(), 'version': SOFTWARE_VERSION, } # 尝试获取 GPU 信息 gpu_info = get_gpu_info() if gpu_info: info['gpu'] = gpu_info return info def get_capabilities(): """ 获取 Worker 支持的能力列表 Returns: list: 能力列表 """ return DEFAULT_CAPABILITIES.copy() def get_gpu_info() -> Optional[str]: """ 尝试获取 GPU 信息 Returns: str: GPU 信息,失败返回 None """ try: # 尝试使用 nvidia-smi result = subprocess.run( ['nvidia-smi', '--query-gpu=name', '--format=csv,noheader'], capture_output=True, text=True, timeout=5 ) if result.returncode == 0: gpu_name = result.stdout.strip().split('\n')[0] return gpu_name except Exception: pass return None def get_ffmpeg_version() -> str: """ 获取 FFmpeg 版本 Returns: str: FFmpeg 版本号 """ try: result = subprocess.run( ['ffmpeg', '-version'], capture_output=True, text=True, timeout=5 ) if result.returncode == 0: first_line = result.stdout.split('\n')[0] # 解析版本号,例如 "ffmpeg version 6.0 ..." parts = first_line.split() for i, part in enumerate(parts): if part == 'version' and i + 1 < len(parts): return parts[i + 1] except Exception: pass return 'unknown'