Python调用nvidia-smi获取GPU显存总量时的返回值类型疑问及数值提取方法咨询
Python调用nvidia-smi获取GPU显存总量时的返回值类型疑问及数值提取方法咨询
嗨,我来帮你把这个问题理清楚~
首先,你困惑为什么val是整数,这是因为**os.system()返回的根本不是命令的输出内容,而是命令执行的退出状态码**:
- 状态码
0表示命令成功执行完成 - 非0值(比如你得到的
1)通常意味着命令执行出了问题——看你的命令里--query-gpu=memory.total--format=csv中间少了空格,nvidia-smi没法正确解析参数,这就是返回1的原因
你在控制台看到的memory.total [MiB]和4096 MiB,是nvidia-smi命令直接打印到标准输出的内容,完全没有被os.system()捕获并返回给val,所以val自然是个整数啦。
要获取到显存数值,你得用subprocess模块来捕获命令的输出,这是Python里执行外部命令并获取结果的标准方式。给你一个可行的示例代码:
import subprocess # 先修复命令里的参数空格问题,之前的--format前面没空格会导致参数错误 cmd = 'C:\\Windows\\System32\\DriverStore\\FileRepository\\nvmdi.inf_amd64_36ae6ddd01b54f49\\nvidia-smi --query-gpu=memory.total --format=csv,noheader' try: # 执行命令并捕获输出,解码成字符串后去除首尾空白 output = subprocess.check_output(cmd, shell=True).decode('utf-8').strip() # 拆分字符串提取数值部分,转成整数 total_memory_mib = int(output.split()[0]) print(f"GPU总显存:{total_memory_mib} MiB") except subprocess.CalledProcessError as e: print(f"命令执行出错:{e}")
这段代码的关键点:
- 修复了命令参数里的空格,让nvidia-smi能正确解析查询请求
- 用
subprocess.check_output()捕获命令的输出内容,而不是状态码 - 添加了
noheader参数,让nvidia-smi只输出数值行,不需要处理表头 - 拆分输出字符串,提取出纯数字部分并转成整数,方便后续使用
备注:内容来源于stack exchange,提问作者s p




