This parse dmidecode output to JSON text.
pip3 install -U dmiparsergit clone https://github.com/Arondight/python-dmiparser.git
cd ./python-dmiparser/
python3 ./setup.py bdist --format=rpm
sudo dnf install ./dist/dmiparser-*.noarch.rpmTip: Requires the
rpm-buildpackage in your Linux distribution.
This accepts a str (with the output of dmidecode) as argument and converts it to JSON text.
#!/usr/bin/env python3
import json
from dmiparser import DmiParser
from functools import partial
def report(*args: str) -> None:
    """report texts with format
    @param args: text string
    """
    br = lambda e: print("-" * e)
    brn = partial(br, 80)
    brn()
    for e in args:
        print(e)
        brn()
if "__main__" == __name__:
    text = (
        "# dmidecode 3.0\n"
        "Getting SMBIOS data from sysfs.\n"
        "SMBIOS 2.7 present.\n"
        "\n"
        "Handle 0x0003, DMI type 2, 17 bytes\n"
        "Base Board Information\n"
        "\tManufacturer: Intel Corporation\n"
        "\tProduct Name: S2600WT2R\n"
        "\tVersion: H21573-372\n"
        "\tSerial Number: BQWL81150522\n"
        "\tAsset Tag: Base Board Asset Tag\n"
        "\tFeatures:\n"
        "\t\tBoard is a hosting board\n"
        "\t\tBoard is replaceable\n"
        "\tLocation In Chassis: Part Component\n"
        "\tChassis Handle: 0x0000\n"
        "\tType: Motherboard\n"
        "\tContained Object Handles: 0\n"
        "\n"
    )
    # parser = DmiParser(text)
    parser = DmiParser(text, sort_keys=True, indent=2)
    parsedStr = str(parser)  # get str
    parsedObj = json.loads(str(parser))  # get object
    report(parsedStr, parsedObj)This run dmidecode and converting the output of the command to JSON text.
from dmiparser.dmidecoder import DmiDecoder
from functools import partial
def report(*args: str) -> None:
    """report texts with format
    @param args: text string
    """
    br = lambda e: print("-" * e)
    brn = partial(br, 80)
    brn()
    for e in args:
        print(e)
        brn()
def getCpuInfo(dmidecoder) -> str:
    """Get CPU information, will return text like below.
    CPU1:
        Family: Xeon
        Version: Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz
        Voltage: 1.8 V
        Speed: 2200 MHz/4000 MHz
        Status: Populated, Enabled
        Core: 10/10
        Thread: 20
    CPU2:
        Family: Xeon
        Version: Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz
        Voltage: 1.8 V
        Speed: 2200 MHz/4000 MHz
        Status: Populated, Enabled
        Core: 10/10
        Thread: 20
    @param: dmidecode: DmiDecode object
    @return: text of CPU information
    """
    text = ""
    for id, name in dmidecoder.sections:
        def getFirst(*args):
            vals = dmidecoder.getProp(*args, id=id, name=name)
            return vals[0] if len(vals) > 0 else None
        text += "{}:\n".format(getFirst("Socket Designation"))
        text += "\tFamily: {}\n".format(getFirst("Family"))
        text += "\tVersion: {}\n".format(getFirst("Version"))
        text += "\tVoltage: {}\n".format(getFirst("Voltage"))
        text += "\tSpeed: {}/{}\n".format(getFirst("Current Speed"), getFirst("Max Speed"))
        text += "\tStatus: {}\n".format(getFirst("Status"))
        text += "\tCore: {}/{}\n".format(getFirst("Core Enabled"), getFirst("Core Count"))
        text += "\tThread: {}\n".format(getFirst("Thread Count"))
    return text
if "__main__" == __name__:
    # dmidecoder = DmiDecoder()
    dmidecoder4 = DmiDecoder("-t 4", sort_keys=True, indent=2)  # Type 4 is Processor
    report(dmidecoder4.text, str(dmidecoder4.data), getCpuInfo(dmidecoder4))Tip: Superuser permissions are required here to run
dmidecode.
This read output of dmidecode from pipe and print it as JSON text.
sudo dmidecode | dmiparser
sudo dmidecode -t 4 | dmiparser --formatsudo dmidecode >/tmp/dmidecode.txt
dmiparser </tmp/dmidecode.txtTip: you can run
dmiparsermodule as a script (usepython3 -m dmiparserinstead ofdmiparsercommand).
This run dmidecode and print the output as JSON text.
sudo dmidecoder
sudo dmidecoder --arguments "-t 4" --formatTip: you can run
dmiparser.dmidecodermodule as a script (usepython3 -m dmiparser.dmidecoderinstead ofdmidecodercommand).
toxblack -l 120 ./dmiparser/ ./tests/