From 25f43621edd3649bb8fa92106fca00cc51a42524 Mon Sep 17 00:00:00 2001 From: Mathis Felardos <3902859+hasB4K@users.noreply.github.com> Date: Thu, 2 Apr 2020 19:28:21 +0200 Subject: [PATCH] utils/gpu: fix nvidia-smi parsing for new nvidia-smi that uses (N/A) when unsupported (#776) --- i3pystatus/utils/gpu.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/i3pystatus/utils/gpu.py b/i3pystatus/utils/gpu.py index d2a84df..3715cda 100644 --- a/i3pystatus/utils/gpu.py +++ b/i3pystatus/utils/gpu.py @@ -1,11 +1,21 @@ import subprocess from collections import namedtuple +from typing import Optional GPUUsageInfo = namedtuple('GPUUsageInfo', ['total_mem', 'avail_mem', 'used_mem', 'temp', 'percent_fan', 'usage_gpu', 'usage_mem']) +def _convert_nvidia_smi_value(value) -> Optional[int]: + value = value.lower() + # If value contains 'not' or 'N/A' - it is not supported for this GPU + # (in fact, for now nvidia-smi returns '[Not Supported]' or '[N/A]' depending of its version) + if "not" in value or "n/a" in value: + return None + return int(value) + + def query_nvidia_smi(gpu_number) -> GPUUsageInfo: """ :return: @@ -37,7 +47,6 @@ def query_nvidia_smi(gpu_number) -> GPUUsageInfo: output = output.decode('utf-8').split("\n")[gpu_number].strip() values = output.split(", ") - # If value contains 'not' - it is not supported for this GPU (in fact, for now nvidia-smi returns '[Not Supported]') - values = [None if ("not" in value.lower()) else int(value) for value in values] + values = [_convert_nvidia_smi_value(value) for value in values] return GPUUsageInfo(*values)