2015-07-13 4 views
0

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

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

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

+0

@ J.F.Sebastian, как это обозначается как дубликат? Связанный вопрос только показывает, как сохранить вывод подпроцесса, я знаю, как это делается, я хотел, чтобы лучший способ получить определенную часть вывода подпроцесса. Дублированная бригада здесь в последнее время смешна, если у вас нет ничего лучше, по крайней мере, прочитать вопрос – twigg

+0

, у вашего вопроса есть * no * указание, что вы знаете, как сохранить вывод подпроцесса.[edit] it, чтобы включить эту информацию: чтобы показать, что ваш вопрос отличается. Какой у Вас вопрос? Как найти строку, содержащую '' Имя продукта 'в байтовой строке или списке строк? – jfs

+0

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

ответ

2

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

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

dmideocde -s system-product-name 

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

  • Для возврата Информация о системе:

    dmidecode -t1 
    
  • Для возврата информации плинтусом:

    dmidecode -t2 
    
  • Для возврата шасси Информация:

    dmidecode -t3 
    
+0

У вас есть список всех элементов в dmidecode, таких как system-product-name? – twigg

+0

Да, вы можете найти его у человека. Вот список: bios-vendor, bios-version, bios-release- дата, системный производитель, системный номер продукта, системная версия, системный номер, системный uuid, baseboard-man- производитель , baseboard-product-name, baseboard-version, baseboard-serial-number, baseboard-asset-tag, chassis-manu- факторинг, тип шасси, версия шасси, серийный номер шасси, идентификатор шасси-объекта, процессор-семейство, процессор производитель, процессор-версия, частота процессора –

+1

@twigg: запустите 'dmidecode -s', чтобы получить полный список – jfs

1

Существует несколько способов, с помощью которых вы можете получить вывод команды в сценарии 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() - эта функция возвращает вывод команды (выход на стандартный вывод) в виде строки байт после выполнения команды. Пример -

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

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

С subprocess.Popen() вам также может потребоваться предоставить входные данные для процесса, выполнив PIPING stdin.

+0

. Почему бы вам не показать' Popen() '+' .communicate() ', если там это 'check_output()'? – jfs

+0

Я только что дал некоторые возможности. Они могут выбирать все, что захотят. –

+0

Вы не указали никаких критериев, по которым нужно быть более предпочтительным, чем другое. Почему эти 2 конкретных метода? существует много других методов, я не вижу их упоминания - зачем останавливаться? – jfs