Подпроцесс 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
модуль.
subprocess.Popen()
- вы можете запустить процесс командной строки, используя этоPopen
указание классаstdout
какsubprocess.PIPE
а затем использоватьcommunicate
функция, чтобы получить результаты. Пример -import subprocess p = subprocess.Popen(['dmidecode'] , stdout=subprocess.PIPE) result = p.communicate()[0]
subprocess.check_output()
- эта функция возвращает вывод команды (вывод в stdout) в виде байтовой строки после выполнения команды. Пример -import subprocess result = subprocess.check_output(['dmidecode'])
Для вашего конкретного случая, subprocess.check_output()
скорее всего, больше подходит, так как вам не нужно предоставлять какие-либо входные данные для процесса.
С subprocess.Popen()
Вам также может потребоваться внести вклад в процесс, ТРУБА stdin
для процесса.