You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动