#!/usr/bin/env python3 import subprocess from subprocess import PIPE, DEVNULL import re """ Example radeontop output: 1661693993.532512: bus 2d, gpu 0.83%, ee 0.00%, vgt 0.00%, ta 0.83%, sx 0.83%, sh 0.00%, spi 0.83%, sc 0.83%, pa 0.00%, db 0.83%, cb 0.83%, vram 6.61% 539.47mb, gtt 0.92% 73.34mb, mclk 100.00% 2.000ghz, sclk 74.64% 1.168ghz """ class radeontop: def __init__(self): Komi = subprocess.Popen(["radeontop", "-l", "1", "-d", "-"], stdout=PIPE, stderr=DEVNULL) output = Komi.communicate()[0].decode('utf-8') # Komi can communicate? output = output.split("\n")[2] self.output = output.split(",") def join_tuple_string(self, strings_tuple) -> str: return ' '.join(strings_tuple).strip() def get_usage(self, field): for x in self.output: if field in x: results = re.findall(r'(\d+.\d+)(mb|ghz)?', x) return list(map(self.join_tuple_string, results)) def get_multiple_usages(self, fields: []): result = {} for x in fields: result[x] = self.get_usage(x) return result if __name__ == "__main__": rtop = radeontop() radeontop_fields = ["gpu"] result = rtop.get_multiple_usages(radeontop_fields) result = result['gpu'][0].split('.')[0] #format_string = f"{result['gpu'][0]}%" format_string = f"{result}%" print(format_string)