Подпроцесс Python 2 (dmidecode) для переменной?

Я запускаю dmidecode в Linux, чтобы получить список информации об оборудовании. Каков наилучший способ прочитать вывод и выбрать определенные биты информации? Например, получите Название продукта: часть dmidecode?

В данный момент я записываю вывод подпроцесса в файл, затем читаю файл для заданной строки. Это кажется таким неэффективным способом ведения дел.

Также я знаю о модели Python dmidecode, но я не могу заставить ее работать, она просто говорит, что нет атрибута bios

2 ответа

Если вы знаете конкретное ключевое слово, которое вы ищете, вы можете ввести: dmidecode -s keyword

В вашем случае это будет:

dmideocde -s system-product-name

Вы также можете фильтровать по типу. Например:

  • Чтобы вернуть Системную информацию:

    dmidecode -t1
    
  • Чтобы вернуть информацию BaseBoard:

    dmidecode -t2 
    
  • Чтобы вернуть информацию о шасси:

    dmidecode -t3
    

Есть несколько способов, которыми вы можете получить вывод команды в вашем скрипте Python, используя subprocess модуль.

  1. subprocess.Popen() - вы можете запустить процесс командной строки, используя это Popen указание класса stdout как subprocess.PIPE а затем использовать communicate функция, чтобы получить результаты. Пример -

    import subprocess
    p = subprocess.Popen(['dmidecode'] , stdout=subprocess.PIPE)
    result = p.communicate()[0]
    
  2. subprocess.check_output() - эта функция возвращает вывод команды (вывод в stdout) в виде байтовой строки после выполнения команды. Пример -

    import subprocess
    result = subprocess.check_output(['dmidecode'])
    

Для вашего конкретного случая, subprocess.check_output() скорее всего, больше подходит, так как вам не нужно предоставлять какие-либо входные данные для процесса.

С subprocess.Popen() Вам также может потребоваться внести вклад в процесс, ТРУБА stdin для процесса.

Другие вопросы по тегам