Czy za pomocą pythona można pobrać informacje o sprzęcie?

0

Witam!

Moje pytanie pytanie dokładnie brzmi tak jak w temacie, czy można pobrać informacje o sprzęcie za pomocą pythona? Jeżeli jest możliwość, to w jaki sposób? Szukałem na internecie, widziałem jakąś bibliotekę która pobiera, ale jedynie architekturę na jakiej oparty jest procesor, a ja potrzebuję nazwę procesora, i do tego także nazwę karty graficznej, pojemność dysku i ilość pamięci ram która jest zainstalowana w komputerze, a na sam koniec te informacje wdrożyć do MySQL. Z góry dziękuję za pomoc.

3

(...) potrzebuję nazwę procesora (...)

Dosłownie pierwszy wynik po wpisaniu w Google python get processor name: https://stackoverflow.com/questions/4842448/getting-processor-information-in-python

(...) pojemność dysku (...)

Dosłownie pierwszy wynik po wpisaniu w Google python get disk size: https://stackoverflow.com/questions/48929553/get-hard-disk-size-in-python

(...) ilość pamięci ram (...)

Dosłownie pierwszy wynik po wpisaniu w Google python get ram size: https://stackoverflow.com/questions/22102999/get-total-physical-memory-in-python

Jedynym problematycznym komponentem jest karta graficzna - tutaj nie ma prostej odpowiedzi; w zależności od systemu będziesz w stanie np. przeparsować wynik lshw.

0

Dziękuję za pomoc, procesor, dysk jak i również ram udało się pobrać bez większych problemów, mam pytanie odnośnie GPU. Znalazłem dwa sposoby żeby pobrać nazwy kart graficznych, tylko teraz się zastanawiam w jaki sposób mógłbym pobrać te nazwy kart i przypisać je do zmiennych? Jest jakiś pewny sposób dzięki któremu będę mógł odwołać się do danego miejsca w wyniku który się wyświetla i pobrać nazwę tak żeby sam model karty graficznej został wpisany do bazy danych? Sposoby jakie znalazłem to:

import os
a = os.system('wmic PATH Win32_videocontroller GET description')

po zakończeniu jego działania dostaję wynik:

Description
Intel(R) HD Graphics 630
NVIDIA GeForce GTX 1050 Ti

drugi sposób to:

from gpuinfo.windows import get_gpus
for gpu in get_gpus():
    print(gpu.__dict__)

w którym dostaje wynik:

{'name': 'Intel(R) HD Graphics 630', 'total_memory': 1024, 'device_id': 'VideoController1'}
{'name': 'NVIDIA GeForce GTX 1050 Ti', 'total_memory': 4095, 'device_id': 'VideoController2'}

0

print(gpu.name) zwróci Ci właśnie nazwę GPU - na czym konkretnie się zatrzymałeś?

0

Właśnie doszedłem do tego

print(gpu.name)

i drukuje mi teraz:

Intel(R) HD Graphics 630
NVIDIA GeForce GTX 1050 Ti

a teraz chciałbym żeby np. te wyniki miały jakiś indeks czy coś w tym stylu, w sensie że np napisze a = gpu.name i gpu.name zwróci mi samą NVIDIA GeForce GTX 1050 Ti a w innej zmiennej zwróci mi kartę ** Intel(R) HD Graphics 630** bo potrzebuję żeby karty wchodziły do dwóch kolumn w bazie oznaczonych GPU1 i GPU2 a później można było je porównać po nazwie w bazie danych

0
Krispi One napisał(a):

a teraz chciałbym żeby np. te wyniki miały jakiś indeks czy coś w tym stylu, w sensie że np napisze a = gpu.name i gpu.name zwróci mi samą NVIDIA GeForce GTX 1050 Ti a w innej zmiennej zwróci mi kartę ** Intel(R) HD Graphics 630** bo potrzebuję żeby karty wchodziły do dwóch kolumn w bazie oznaczonych GPU1 i GPU2 a później można było je porównać po nazwie w bazie danych

A nie możesz użyć jakiegoś nie wiem, enumerate jeśli koniecznie chcesz wygenerować w kodzie indeksy dla tych kolejnych kart?

for counter, gpu in enumerate (get_gpus()):
  # blah blah blah robisz z tym co chcesz
0
Krispi One skomentował(a):

właśnie to takie trochę dziwne jest co robię wiem, ale wiesz muszę wpisać te dane co pobieram do bazy danych. Żeby dobrze było mi je przypisać to chciałbym żeby każdy wynik jaki powstaje był dostępny pod zmienną. Po prostu mówiąc wpisuje print(a) wyskakuje mi NVIDIA GeForce GTX 1050 Ti wpisuje print(b) wyskakuje Intel(R) HD Graphics 630, bo teraz mam takie coś ze robię a = gpu.name print(a) wyskakują mi obydwie karty, i nie mam jak się odwołać do każdej z osobna, tak żeby można by było jeden wynik wrzucić do jednej kolumny bazy, łatwiej nie potrafię tego opisać chyba

no przecież printujesz w pętli do stdout kolejno nazwy tych kart, niby jak chcesz je mieć osobno, kiedy wrzucasz je do jednego wora? o.O

Jak chcesz mieć je wszystkie wrzucone do bazy, to kleisz sobie albo jakiś prepared statement którym wrzucisz sobie te nazwy wszystkie naraz (jak Ci się chce robić bulk insert), albo każdy z osobna (jak chcesz kiedyś się potknąć na strzelaniu zapytaniami do bazy jak z karabinu) albo robisz to samo tylko używając jakiegoś SQLAlchemy czy innego cudawianka do gadania z bazą bez ręcznego rzezania SQLi.

W bazie robisz sobie tabelkę z kluczem który będzie sobie miał jakiś autoincrement i masz w pompce tworzenie jakichś dziwnych indeksów w kodzie i wrzucania ich do osobnych zmiennych... zresztą jak niby miałbyś dynamicznie tworzyć nowe zmienne na każdą kolejną kartę, czy tam indeks, czy cokolwiek?

Nie da się napisać sensownego kodu, który przejedzie pętlą po czymś, po czym dynamicznie stworzy zmienne, do których potem będziesz się mógł odwołać np. masz 3 karty graficzne i powstaną Ci zmienne zmienna1, zmienna2, zmienna3. Na okrętkę byś to zrobił jakimś eval, ale stanowczo odradzam.

Weź użyj jak człowiek jakiejś listy, tupla, słownika, czegokolwiek i wrzuć sobie tam te nazwy do kupy, a potem przerzuć do bazy. Albo od razu przerzuć do bazy, ganz egal.

BTW. Jak chcesz zrobić tak, żeby każdą kartę wrzucać do osobnej kolumny - to też raczej kiepski pomysł. Co, jeśli odpalisz kiedyś skrypt na stacji mającej 4 GPU + integrę, a Ty przewidzisz miejsce tylko na 3? Jak zdecydujesz o kolejności umieszczania? Lepiej porób sobie tabele pomocnicze np. osobną na komputery, osobną na karty graficzne, i jeszcze jedną np. złączeniową, która będzie trzymać informacje w jakim komputerze są jakie karty. Ułatwi Ci to życie, jeśli chcesz zrobić to, co myślę, a przy okazji postawisz pierwsze kroki w normalizacji :P

0

Panowie, dziękuję bardzo za pomoc, dobrałem się do listy i zaczęło wyszukiwać wyniki tak jak trzeba, kod w pythonie:

karty = []
for gpu in get_gpus():
    karty.append(gpu.name)
print(karty)

print(karty[0])
print(karty[1])

wynik po wykonaniu kodu

['Intel(R) HD Graphics 630', 'NVIDIA GeForce GTX 1050 Ti']
Intel(R) HD Graphics 630
NVIDIA GeForce GTX 1050 Ti

dziękuję jeszcze raz, każdy wynik pięknie zindeksowany, pod indeksem 0 mam pierwszą nazwę karty, pod indeksem 1 drugą nazwę karty, tego oczekiwałem, teraz jedynie zostało powalczyć z podłączeniem tego do MySQL i wrzuceniem danych do kolumny :D

Poniżej wrzucam cały kod który udało mi się zrobić, może komuś się przyda, i jeżeli macie jakieś pomysły optymalizacji jego to oczywiście chętnie je poznam.

Kod poniżej:

import cpuinfo
import psutil
from gpuinfo.windows import get_gpus
from psutil import virtual_memory
info = cpuinfo.get_cpu_info()['brand'].split('@', 1)
print(info[0])

obj_Disk = psutil.disk_usage('/')
a = obj_Disk.free / (1024**3)
print('%.0f' % a, "GB")

mem = virtual_memory()
b = mem.total / (1024**3)
print('%.0f' % b, "GB")

karty = []
for gpu in get_gpus():
    karty.append(gpu.name)

print(karty[0])
print(karty[1])

wynik:

Intel(R) Core(TM) i7-7700HQ CPU
721 GB
16 GB
Intel(R) HD Graphics 630
NVIDIA GeForce GTX 1050 Ti

Podany kod odpowiednio pobiera informacje o procesorze, wolnym miejscu na dysku, zainstalowanej pamięci ram i dostępne karty graficzne w komputerze

1 użytkowników online, w tym zalogowanych: 0, gości: 1