furas.pl
# prywatne notatki - Python, Linux, Machine Learning, etc.

Jak sprawdzić rodzaj pamięci RAM pod Linux z użyciem Pythona.

To jest kontynuacja wpisu: Sprawdzanie pod Linux rodzaju pamięci RAM

Konsolowe programy podające rodzaj kości RAM w Linux można wykorzystać w Pythonie z użycie os.system() albo subprocess ale akurat programy dmidecode i osquery mają już gotowe moduły w Pythonie.

UWAGA: Ponieważ normalnie informacje o kościach wymagają uprawnień administratora więc skrypty należy uruchamiać z użyciem sudo

$ sudo python skrypt.py

dmidecode

Są dwa moduły dla dmidecode ale mnie interesuje py-dmidecode

Instalacja:

$ pip install py-dmidecode

Odpowiednikiem

$ sudo dmidecode --type 17

może być

import dmidecode
import pprint

data = dmidecode.get_by_type(17)
pprint.pprint(data)

Ponieważ moduł dostarcza dane w postaci listy ze słownikami więc łatwo można wyświetlić tylko wybrane informacje:

import dmidecode

data = dmidecode.get_by_type(17)

for item in data:
    size = item['Size']
    if size != 'No Module Installed':  # pominięcie pustych banków
        print(item['Form Factor'], item['Type'], size, item['Speed'])

Ponieważ mam dwie kości RAM i odfiltrowałem puste banki więc dostałem wynik w postaci:

SODIMM DDR3 4096 MB 1334 MT/s
SODIMM DDR3 4096 MB 1334 MT/s

osquery

Dla osquery jest tylko jeden moduł Pythona i to stworzony przez twórców osquery czyli przez Facebook.

Instalacja:

$ pip install osquery

Odpowiednikiem

$ sudo osqueryi 'SELECT * FROM memory_devices'

może być (tyle, że zamiast tabeli otrzymamy listę słowników)

import osquery
import pprint

instance = osquery.SpawnInstance()
instance.open()

data = instance.client.query('SELECT * FROM memory_devices')
pprint.pprint(data.response)

Ponieważ ten moduł także dostarcza dane w postaci listy ze słownikami więc i tu łatwo można wyświetlić tylko wybrane informacje:

import osquery

instance = osquery.SpawnInstance()
instance.open()

data = instance.client.query('SELECT * FROM memory_devices')

for item in data.response:
    size = item['size']
    if size != '0':  # pominięcie pustych banków
        print(item['form_factor'], item['memory_type'], size, item['max_speed'])

Otrzymuję wynik podobny do poprzedniego

SODIMM DDR3 4096 1334
SODIMM DDR3 4096 1334
Książki: python-dla-kazdego-podstawy-programowania python-wprowadzenie python-leksykon-kieszonkowy python-receptury python-programuj-szybko-i-wydajnie python-projekty-do-wykorzystania black-hat-python-jezyk-python-dla-hackerow-i-pentesterow efektywny-python-59-sposobow-na-lepszy-kod tdd-w-praktyce-niezawodny-kod-w-jezyku-python aplikacje-internetowe-z-django-najlepsze-receptury