import subprocess def fans(data): if "FAN" in data[0]: fandata = {} fandata["id"] = data[0] fandata["rpm"] = data[1] fandata["status"] = data[3] return fandata def voltage(data): if "VOLT" in data[0]: voltdata = {} voltdata["id"] = data[0] voltdata["voltage"] = data[1] voltdata["status"] = data[3] return voltdata def temp(data): if "TEMP" in data[0]: tempdata = {} tempdata["id"] = data[0] tempdata["temp"] = data[1] tempdata["status"] = data[3] return tempdata def readSensors(): result = subprocess.run(['ipmitool', 'sensor'], stdout=subprocess.PIPE) result = str(result.stdout).replace(" ", "").replace("b'", "").replace("'", "").split("\\n") retdata = {} fandata = {} tempdata = {} voltdata = {} fanindex = 0 voltindex = 0 tempindex = 0 for sensor in result: data = sensor.split("|") try: if data[1] != "na": if data[1] != "0x0": # print(data) if fans(data) != None: fandata[str(fanindex)] = fans(data) fanindex += 1 if voltage(data) != None: voltdata[str(voltindex)] = voltage(data) voltindex += 1 if temp(data) != None: tempdata[str(tempindex)] = temp(data) tempindex += 1 except: # Exception as e: print(e) pass retdata["fans"] = fandata retdata["volt"] = voltdata retdata["temp"] = tempdata return retdata if __name__ == "__main__": print(readSensors())