Как в Python узнать частоту оперативной памяти и её тип?
Я хочу написать модуль для получения ПОЛНОЙ информации о ПК. С информацией о процессоре проблем не было, но вот с оперативной памятью, перерыл все возможные сайты. Не нашёл — не одну либу или способ получения частоты и типа (DDR3 к примеру). В psutil и ей подобных модулях нету данной функции, вот прошу, помощи в данном вопросе!
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Как узнать частоту оперативной памяти?
Как узнать частоту оперативной памяти?
Как узнать частоту оперативной памяти?
как програмно узнать частоту оперативной памяти
Узнать частоту оперативной памяти
Доброго времени суток. Есть ли способ на андройдах узнать частоту оперативной памяти на программном.
Как узнать тип оперативной памяти HP?
Уважаемые Гуру! Как на HP узнать тип установленной памяти? на своем компьютере я использую.
Am I evil? Yes, I am!
![]()
![]()
16120 / 9755 / 2731
Регистрация: 21.10.2017
Сообщений: 21,624
Узнавай средствами ОС
Регистрация: 20.03.2020
Сообщений: 10
Эх, так и думал, что мне кто-то так ответит. Хоть скажи, команды к примеру для Windows или способы перечисли. Если, конечно ты знаешь и тебе не сложно.
Am I evil? Yes, I am!
![]()
![]()
16120 / 9755 / 2731
Регистрация: 21.10.2017
Сообщений: 21,624
Не, для винды не знаю, увы
Регистрация: 20.03.2020
Сообщений: 10
Я нашёл, но всё равно спасибо, ниже приведу пример команды для Windows, для тех кто гуглит, далее пусть сами парсинг пишут:
wmic memorychip get devicelocator, partnumber, serialnumber, capacity, speed
![]()
2679 / 1585 / 512
Регистрация: 21.02.2017
Сообщений: 4,205
Записей в блоге: 1
_Romanin_, psutils в помощь.
Регистрация: 20.03.2020
Сообщений: 10
Первое — Нету там такого!
Второе — Тема закрыта!
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Как узнать тип оперативной памяти DDR-3, DDR-4, etc?
Есть следующий рабочий код: /// <summary> /// Получение инфы о плашках оперативы .
Как определить частоту оперативной памяти
Доброго времени суток. Я недавно купил себе ноутбук msi с 8 Гб оперативки, в будущем думаю.
Как увеличить частоту оперативной памяти?
Две ОП 8Gb-2400MHz DDR4. Материнская плата MSI B250M PRO-VD. Проц Intel Core i3 7100 @ 3.90GHz. Не.

Как повысить частоту оперативной памяти?
Здравствуйте! Подскажите. Имеются 2 планки KVR800D2N6/2G 2 Гб и мать ASRock G31M-S. Работают на.
Как задать одинаковую частоту на оперативной памяти ?
Вкратце: было 2 гига оперативки, нужен был ещё 1 гиг.. когда узнал что у меня оказывается DDR2.
Как узнать частоту памяти видеокарты
Частоту памяти видеокарты заявляют в характеристиках как несколько гигагерц, а GPUZ показывает.
Не выводит частоту оперативной памяти
пишу код //#define _WIN32_DCOM #include <iostream> using namespace std; #include <comdef.h>.
Различная статистика по использованию ресурсов ОС и ЦП
Материал содержит описание функций модуля psutil с примерами, которые возвращают различные статистические данные об использовании ресурсов операционной системы и программного обеспечения, работающего в ней. Такие как: текущая загрузка ОС и ЦП, количество логических и физических процессоров, частота ЦП, процессорное время и т.д.
Содержание:
- psutil.cpu_times() время работы системного процессора,
- psutil.cpu_percent() текущая загрузка ЦП в процентах,
- psutil.cpu_times_percent() то же, что psutil.cpu_times(percpu=True) ,
- psutil.cpu_count() количество логических и физических процессоров,
- psutil.cpu_stats() различная статистика ЦП,
- psutil.cpu_freq() частота ЦП,
- psutil.getloadavg() средняя загрузка системы,
- psutil.boot_time() время загрузки системы.
psutil.cpu_times(percpu=False) :
Функция psutil.cpu_times() возвращает время работы системного процессора в виде именованного кортежа. Каждый атрибут представляет секунды, потраченные процессором в данном режиме.
Когда аргумент percpu имеет значение True , то функция возвращает список именованных кортежей для каждого логического процессора в системе. Первый элемент списка относится к первому процессору, второй элемент — ко второму процессору и так далее. Порядок списка одинаков для всех вызовов.
Пример использования psutil.cpu_times() в Linux:
>>> import psutil >>> psutil.cpu_times() # scputimes(user=17411.7, nice=77.99, system=3797.02, idle=51266.57, # iowait=732.58, irq=0.01, softirq=142.43, steal=0.0, guest=0.0, guest_nice=0.0)
Доступность атрибутов варьируется в зависимости от платформы:
- user : время, затрачиваемое обычными процессами, выполняемыми в пользовательском режиме. В Linux оно также включает гостевое время.
- system : время, затрачиваемое процессами, выполняющимися в режиме ядра.
- idle : время, потраченное на простой (когда процессор ничего не делает).
Поля, специфичные для конкретной платформы:
- nice (UNIX): время, затрачиваемое процессами с приоритетом niced , выполняющимися в пользовательском режиме. В Linux это также включает время guest_nice ;
- iowait (Linux): время, потраченное на ожидание завершения ввода-вывода. Это время не учитывается в счетчике времени простоя;
- irq (Linux, BSD): время, затрачиваемое на обслуживание аппаратных прерываний;
- softirq (Linux): время, затрачиваемое на обслуживание программных прерываний;
- steal (Linux 2.6.11+): время, затрачиваемое другими операционными системами, работающими в виртуализированной среде;
- guest (Linux 2.6.24+): время, затрачиваемое на запуск виртуального процессора для гостевых операционных систем под управлением ядра Linux;
- guest_nice (Linux 3.2.0+): время, затраченное на запуск niced guest (виртуальный процессор для гостевых операционных систем под управлением ядра Linux);
- interrupt (Windows): время, затрачиваемое на обслуживание аппаратных прерываний (аналогично “irq” в UNIX)
- dpc (Windows): время, затрачиваемое на обслуживание вызовов отложенных процедур (DPC). DPC — это прерывания, которые выполняются с более низким приоритетом, чем стандартные прерывания.
Предупреждение: процессорное время всегда должно увеличиваться с течением времени или, по крайней мере, оставаться неизменным, потому что время не может идти вспять. Удивительно, но иногда это может быть не так (по крайней мере, в OC Windows и OC Linux).
psutil.cpu_percent(interval=None, percpu=False) :
Функция psutil.cpu_percent() возвращает число float , представляющее текущую загрузку ЦП в масштабе всей системы в процентах.
Когда аргумент interval > 0,0, то сравнивается время системного процессора, прошедшее до и после интервала (блокировка). Когда интервал равен 0,0 или None , то сравнивается время системного процессора, прошедшее с момента последнего вызова или импорта модуля, с немедленным возвратом значения. Это означает, что при первом вызове он вернет бессмысленное значение 0.0, которое необходимо игнорировать. В этом случае для точности рекомендуется вызывать эту функцию с интервалом не менее 0,1 секунды между вызовами.
Когда аргумент percpu имеет значение True , то функция возвращает список чисел float , представляющий использование в процентах для каждого ЦП. Первый элемент списка относится к первому процессору, второй элемент — ко второму процессору и так далее. Порядок списка одинаков для всех вызовов.
Пример использования psutil.cpu_percent() :
>>> import psutil # блокирующий вызов >>> psutil.cpu_percent(interval=1) # 2.0 # неблокирующий вызов # (процент с момента последнего вызова) >>> psutil.cpu_percent(interval=None) # 2.9 # блокирующий вызов, загрузка на процессор >>> psutil.cpu_percent(interval=1, percpu=True) # [2.0, 1.0]
Предупреждение: при первом вызове этой функции с интервалом = 0,0 или None она вернет бессмысленное значение 0,0, которое нужно проигнорировать.
psutil.cpu_times_percent(interval=None, percpu=False) :
Функция psutil.cpu_times_percent() возвращает то же, что и функция psutil.cpu_times(percpu=True) и предоставляет процент использования для каждого конкретного процессорного времени. Аргументы interval и percpu имеют то же значение, что и в psutil.cpu_percent() . В Linux проценты guest и guest_nice не учитываются в процентах user и user_nice .
Предупреждение: при первом вызове этой функции с интервалом, равным 0,0 или None она вернет бессмысленное значение 0,0, которое нужно игнорировать.
psutil.cpu_count(logical=True) :
Функция psutil.cpu_count() возвращает количество логических процессоров в системе (так же, как os.cpu_count ) или None , если оно не определено.
«Логические процессоры» означают количество физических ядер, умноженное на количество потоков, которые могут выполняться на каждом ядре (это называется Hyper-Threading). Если для аргумента logical задано значение False , то возвращает только количество физических ядер или None , если оно не определено. В OpenBSD и NetBSD psutil.cpu_count(logical=False) всегда возвращает None .
Пример использования psutil.cpu_count() для системы с 2 ядрами + Hyper Threading:
>>> import psutil >>> psutil.cpu_count() # 4 >>> psutil.cpu_count(logical=False) # 2
Обратите внимание, что psutil.cpu_count() не обязательно может быть эквивалентно фактическому количеству процессоров, которые может использовать текущий процесс. Число может измениться в случае изменения привязки процессора к процессу, использования контрольных групп Linux или (в случае Windows) в системах, использующих группы процессоров или имеющих более 64 процессоров.
Количество используемых ЦП можно получить с помощью:
>>> len(psutil.Process().cpu_affinity()) # 1
psutil.cpu_stats() :
Функция psutil.cpu_stats() возвращает различную статистику ЦП в виде именованного кортежа:
- ctx_switches : количество переключений контекста (добровольных + непроизвольных) с момента загрузки.
- interrupts : количество прерываний с момента загрузки.
- soft_interrupts : количество программных прерываний с момента загрузки. В Windows и SunOS всегда устанавливается значение 0.
- syscalls : количество системных вызовов с момента загрузки. В Linux всегда устанавливается в 0.
Пример использования psutil.cpu_stats() для Linux:
>>> import psutil >>> psutil.cpu_stats() # scpustats(ctx_switches=20455687, interrupts=6598984, soft_interrupts=2134212, syscalls=0)
psutil.cpu_freq(percpu=False) :
Функция psutil.cpu_freq() возвращает частоту ЦП в виде именованного кортежа, включая текущую, минимальную и максимальную частоты, выраженные в МГц.
В Linux текущая частота сообщает значение в реальном времени, на всех других платформах значение представляет собой номинальное «фиксированное» значение (никогда не меняющееся). Если аргумент percpu имеет значение True и система поддерживает получение частоты для каждого процессора (только Linux), то возвращается список частот для каждого процессора, если не поддерживает, то возвращается список с одним элементом. Если минимальные и максимальные значения не могут быть определены, то они устанавливаются равными 0,0.
Пример использования psutil.cpu_freq() для Linux:
>>> import psutil >>> psutil.cpu_freq() # scpufreq(current=931.42925, min=800.0, max=3500.0) >>> psutil.cpu_freq(percpu=True) # [scpufreq(current=2394.945, min=800.0, max=3500.0), # scpufreq(current=2236.812, min=800.0, max=3500.0), # scpufreq(current=1703.609, min=800.0, max=3500.0), # scpufreq(current=1754.289, min=800.0, max=3500.0)]
Доступность: Linux, macOS, Windows, FreeBSD, OpenBSD
psutil.getloadavg() :
Функция psutil.getloadavg() возвращает среднюю загрузку системы за последние 1, 5 и 15 минут в виде кортежа. «Нагрузка» представляет собой процессы, находящиеся в состоянии готовности к выполнению, либо использующие ЦП, либо ожидающие использования ЦП (например, ожидающие дискового ввода-вывода).
В системах UNIX это зависит от os.getloadavg . В Windows это эмулируется с помощью Windows API, который порождает поток, который продолжает работать в фоновом режиме и обновляет результаты каждые 5 секунд, имитируя поведение UNIX. Таким образом, в Windows при первом вызове и в течение следующих 5 секунд он будет возвращать бессмысленный кортеж (0.0, 0.0, 0.0) .
Возвращаемые числа имеют смысл только в том случае, если они связаны с количеством ядер ЦП, установленных в системе. Так, например, значение 3,14 в системе с 10 логическими ЦП означает, что загрузка системы за последние N минут составила 31,4%.
Пример использования psutil.getloadavg() :
>>> import psutil >>> psutil.getloadavg() # (3.14, 3.89, 4.67) >>> psutil.cpu_count() # 10 # процентное представление загрузки системы >>> [x / psutil.cpu_count() * 100 for x in psutil.getloadavg()] # [31.4, 38.9, 46.7]
Доступность: Unix, Windows
psutil.boot_time() :
Функция psutil.boot_time() возвращает время загрузки системы, выраженное в секундах с начала эпохи.
Пример использования psutil.boot_time() :
>>> import psutil, datetime >>> psutil.boot_time() # 1389563460.0 >>> datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d %H:%M:%S") # '2014-01-12 22:51:00'
Обратите внимание, что в Windows эта функция может возвращать время, которое отличается на 1 секунду, если она используется в разных процессах.
- ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
- Статистика использование ресурсов ОС и ЦП, модуль psutil
- Статистика использования RAM и SWAP, модуль psutil
- Статистика использования диска, модуль psutil
- Информация о сетевых картах и их соединениях, модуль psutil
- Функции для работы c PID модуля psutil
- Информация с датчиков сервера, модуль psutil
- Функция users() модуля psutil
- Объект Process модуля psutil
- Мониторинг служб ОС Windows модулем psutil
- Класс Popen() модуля psutil
- Встроенные исключения модуля psutil
- Константы модуля psutil
Статья Получаем информацию о системе с помощью Python. Часть #1
Информация о системе. Это всегда лакомый кусочек для каждого, кто имеет хоть какое-то отношение к сбору информации. Ведь чем больше информации о системе будет собрано, тем легче будет в будущем идентифицировать клиента. Составить его индивидуальный отпечаток, по которому он будет безошибочно определятся. Для примера можно взять активацию операционной системы Windows. Вы еще не успели зайти в параметры и настроить систему, а она уже активировалась. При наличии у вас, конечно же интернета.
А что же может предложить Python в этом плане? Скажем так, много чего интересного. Если задастся вопросом, то можно углубляться в эту тему, тему сбора информации, очень долгое время. И порою, кажется, что этой теме нет конца. Как говорил Козьма Прутков: «Нельзя объять необъятное».
Давайте же узнаем, как с помощью Python собрать информацию об операционной системе и желательно, в перспективе и о его железной составляющей. Ведь чем большей информацией мы владеем, тем больше простора для действий.
Что понадобиться?
Из того, что нужно устанавливать, нам понадобиться библиотека psutil. Установить ее можно с помощью команды:
pip install psutil
Также нужно импортировать библиотеку json и модуль uname из библиотеки platform. Давайте сделаем это:
import json import psutil from platform import uname
Итак, необходимые библиотеки установлены и импортированы, пора приступать к написанию программы. Что она должна уметь? Получать информацию о версии ОС, процессоре, RAM и прочих интересных подробностях. То есть, для начала, нам нужен сборщик информации, который пробежится по всем доступным параметрам и сложит их, к примеру, в словарь для удобства дальнейшего использования и чтения. Ну и конечно же, нужно вывести полученную информацию на экран. Хотя, это вовсе не обязательно. И нужно, чтобы это можно было легко отключить. А соответственно, понадобиться отдельная функция для печати. Ну и определение версии операционной системы. На данном этапе это не существенно. Так как те библиотеки, что используются в настоящее время, кроссплатформенные. Но, если мы хотим усовершенствовать программу и получить от нее еще больше результатов, это совершенно необходимо. Давайте же приступим.
На начальном этапе создадим функцию, с помощью которой будем переводить большое количество байтов, то есть информацию об объеме или частоте в формат, который будет удобен для восприятия. Назову ее def correct_size(bts, ending=’iB’). На входе она будет получать число, которое нужно перевести в воспринимаемый формат, и тут же укажем префикс для того, чтобы он автоматически подставлялся к полученному значению. Создадим список, в котором будут содержаться буквы, обозначающие определенный размер: килобайты, мегабайты, гигабайты, террабайты и петабайты. Мало ли что
def correct_size(bts, ending='iB'): size = 1024 for item in ["", "K", "M", "Г", "T", "П"]: if bts < size: return f"" bts /= size
После запустим цикл, в котором будет определено условие, срабатывающее тогда, когда количество байтов меньше 1024, то будем возвращать количество байтов и единицы измерения. В том случае, если условие не сработало, то байты будем делить целочисленно на size.
Сбор информации
Теперь можно приступить к сбору информации. Создадим функцию creating_file(), в которой и будем это делать. Создадим словарь, в который и будем складывать полученные значения по мере их поступления. Затем добавляем в словарь раздел «info». Это делается с помощью условия, в котором проверяется, есть ли такое значение в текущем словаре. Если его нет, то создаем и далее складываем в него получаемую информацию. Первым разделом в словаре будет system, в котором уже из названия понятно, что в нем будет содержаться информация о системе. Та, до которой сможем дотянуться на первоначальном этапе.
Для начала узнаем имя компьютера с помощью модуля uname() и его функции node. Кладем его в словарь. С помощью функции system модуля uname() узнаем наименование операционной системы: uname().system. Затем ее релиз, то есть, что это за версия. Семерка, десятка или восьмерка с помощью uname().release. Ее номер сборки: uname().version, а также архитектуру: 32 или 64 с помощью uname().machine.
Теперь переходим к процессору. Особо много информации мы не получим. Но хотя бы что-то. Получаем его семейство с помощью функции uname().processor. Записываем его в словарь и тут уже настало время подключить библиотеку psutil. С помощью нее узнаем количество физических ядер: psutil.cpu_count(logical=False). Для этого параметр logical ставим в значение False. Затем узнаем общее количество ядер: psutil.cpu_count(logical=True). Тут уже logical=True. И максимальную частоту, до которой способен турбиться данный процессор: psutil.cpu_freq().max:.2f>Мгц. Еще можно получить минимальную частоту, а также текущую частоту процессора.
Переходим к оперативной памяти. Узнаем ее полный объем: correct_size(psutil.virtual_memory().total. Чтобы значения выводились удобно для восприятия прогоняем ее через функцию для коррекции значений. Так же получаем доступную в данный момент память: correct_size(psutil.virtual_memory().available), и тот ее объем, который используется: correct_size(psutil.virtual_memory().used).
Все это, как я и писал ранее, складываем в словарь для дальнейшего использования. Вот код скрипта до этого момента.
Код скрипта с информацией об ОС, RAM, процессоре
import json import psutil from platform import uname def correct_size(bts, ending='iB'): size = 1024 for item in ["", "K", "M", "G", "T", "P"]: if bts < size: return f"" bts /= size def creating_file(): collect_info_dict = dict() if 'info' not in collect_info_dict: collect_info_dict['info'] = dict() collect_info_dict['info']['system_info'] = dict() collect_info_dict['info']['system_info'] = ", 'version': uname().version, 'machine': uname().machine>, 'processor': Мгц">, 'ram': >
Что же, двигаемся дальше, по нелегкому пути сбора информации. Следующим этапом будет получение информации о дисках. Так как их может быть несколько нужно будет использовать функцию, чтобы добыть все значения обо всех дисках, которые у нас в системе. Поэтому создаем цикл который будет пробегаться по значениям возвращаемым psutil.disk_partitions(). Здесь получаем с помощью psutil.disk_usage(partition.mountpoint) такие значения как имя диска, файловую систему, объем, сколько места занято и свободно, а также заполненность диска в процентах. Получение значений обернем в try – except для того, чтобы программа не вылетала с ошибкой. Потому, как попытка доступа к диску, который используется системой или другой программой, будет заблокирован. Поэтому, просто пропускаем этот этап и двигаемся далее. Ну и конечно складываем все в словарь.
Получение информации о дисках
for partition in psutil.disk_partitions(): try: partition_usage = psutil.disk_usage(partition.mountpoint) except PermissionError: continue if 'disk_info' not in collect_info_dict['info']: collect_info_dict['info']['disk_info'] = dict() if f"'device': " not in collect_info_dict['info']['disk_info']: collect_info_dict['info']['disk_info'][partition.device] = dict() collect_info_dict['info']['disk_info'][partition.device] = '>
Теперь получим информацию о сетевых интерфейсах, которые доступны в нашей системе. Сделаем это с помощью psutil.net_if_addrs().items(). Она возвращает такую информацию об интерфейсе как: Имя интерфейса, MAC-адрес, IPv4 и IPv6 адреса. Конечно же, в системе может быть установлено несколько сетевых адаптеров, не считая тех виртуальных адаптеров, которые добавляются программами VmWare и VirtualBox. И конечно же локальная петля, которая также является сетевым интерфейсом. Поэтому, запускаем цикл по значениям данной функции, а так как нам возвращается словарь, то отдельно определим переменную для имени интерфейса и остальных параметров. На данном этапе информацию о локальной петле я решил не включать, а просто пропустить с помощью условия. Так как мне показалось, что данная информация не особо ценна для исследования. Ну и конечно же, складываем все добытое непосильным трудом в словарь.
for interface_name, interface_address in psutil.net_if_addrs().items(): if interface_name == 'Loopback Pseudo-Interface 1': continue else: if 'net_info' not in collect_info_dict['info']: collect_info_dict['info']['net_info'] = dict() if interface_name not in collect_info_dict['info']['net_info']: collect_info_dict['info']['net_info'][interface_name] = dict() collect_info_dict['info']['net_info'][interface_name] =
На выходе данная функция будет возвращать уже готовый полный словарь, который впоследствии используется для записи полученных значений в файл, а также для печати в терминале.
Полный код функции получения параметров
def creating_file(): collect_info_dict = dict() if 'info' not in collect_info_dict: collect_info_dict['info'] = dict() collect_info_dict['info']['system_info'] = dict() collect_info_dict['info']['system_info'] = ", 'version': uname().version, 'machine': uname().machine>, 'processor': Мгц">, 'ram': > for partition in psutil.disk_partitions(): try: partition_usage = psutil.disk_usage(partition.mountpoint) except PermissionError: continue if 'disk_info' not in collect_info_dict['info']: collect_info_dict['info']['disk_info'] = dict() if f"'device': " not in collect_info_dict['info']['disk_info']: collect_info_dict['info']['disk_info'][partition.device] = dict() collect_info_dict['info']['disk_info'][partition.device] = '> for interface_name, interface_address in psutil.net_if_addrs().items(): if interface_name == 'Loopback Pseudo-Interface 1': continue else: if 'net_info' not in collect_info_dict['info']: collect_info_dict['info']['net_info'] = dict() if interface_name not in collect_info_dict['info']['net_info']: collect_info_dict['info']['net_info'][interface_name] = dict() collect_info_dict['info']['net_info'][interface_name] = < 'mac': interface_address[0].address.replace("-", ":"), 'ipv4': interface_address[1].address, 'ipv6': interface_address[2].address>return collect_info_dict
А теперь напишем функцию, с помощью которой будем распечатывать полученные значения в терминале, чтобы мы могли увидеть, что было собрано. На самом деле, это не самая сложная задача. Больше всего времени занимает декорирование, в буквальном смысле, вывода значений, чтобы они отображались приятно для глаза пользователя. Ну, то есть вас или меня. Того, кто будет пользоваться или просто протестирует данную программу.
Создадим функцию def print_info(dict_info), которая на входе получает собранный ранее словарь. Ну и далее запускаем цикл, в котором пробегаемся по всем значениям. Тут важный момент состоит в том, чтобы определить, какое из значений является вложенным словарем, чтобы и из него забрать все значения. Поэтому пишем условия, в которых определяем, является ли значение разделом со словарем. Если да, то заходим в него и забираем значения уже оттуда. После чего формируем принт с помощью f-строки и выводим на экран.
Код функции печати значений
def print_info(dict_info): for item in dict_info['info']: if item == "system_info": for elem in dict_info['info'][item]: if elem == 'system': print(f"[+] Информация о системе\n" f"\t- Имя компьютера: \n" f"\t- Опереционная система: \n" f"\t- Сборка: \n" f"\t- Архитектура: \n") if elem == 'processor': print(f"[+] Информация о процессоре\n" f"\t- Семейство: \n" f"\t- Физические ядра: \n" f"\t- Всего ядер: \n" f"\t- Максимальная частота: \n") if elem == 'ram': print(f"[+] Оперативная память\n" f"\t- Объем: \n" f"\t- Доступно: \n" f"\t- Используется: \n") if item == "disk_info": for elem in dict_info['info'][item]: print(f"[+] Информация о дисках\n" f"\t- Имя диска: \n" f"\t- Файловая система: \n" f"\t- Объем диска: \n" f"\t- Занято: \n" f"\t- Свободно: \n" f"\t- Заполненность: %\n") if item == "net_info": for elem in dict_info['info'][item]: print(f"[+] Информация о сети\n" f"\t- Имя интерфейса: \n" f"\t- MAC-адрес: \n" f"\t- IPv4: \n" f"\t- IPv6: \n")
А теперь перейдем к функции main(), из которой все и запускается. Для начала определяем операционную систему с помощью uname().system и в зависимости от этого запускаем тот или иной код. На данном этапе, как вы видите, он одинаков. Так как определение операционной системы понадобиться в дальнейшем. Это для того, чтобы не использовать функции и команды предназначенные для Windows в Linux и наоборот. Ну и тут же производиться запись полученных значений в файл. Чтобы в потом можно было его легко читать и при необходимости даже использовать, возможно, в какой-нибудь утилите.
Код функции main()
def main(): if uname().system == "Windows": dict_info = creating_file() with open(f'info_.json', 'w', encoding='utf-8') as file: json.dump(dict_info, file, indent=4, ensure_ascii=False) print_info(dict_info) elif uname().system == "Linux": dict_info = creating_file() with open(f'info_.json', 'w', encoding='utf-8') as file: json.dump(dict_info, file, indent=4, ensure_ascii=False) print_info(dict_info)
А теперь, чтобы вы понимали, как выглядит работа данной утилиты, предоставлю пару скриншотов из Windows и Linux, чтобы посмотреть, что там и там скрипт отрабатывает одинаково.
Результат работы программы в Windows:
Работа программы в Windows
Обратите внимание на то, что был создан JSON файл с именем компьютера и содержащий информацию о нем:
Файл JSON из Windows
А это результат работы программы в Linux:
Работа программы в Linux
В результате работы программы также был создан JSON с параметрами системы. То, что некоторые параметры не отображаются, это не потому, что произошла ошибка, а потому, что код был запущен на виртуаках, на которых данных параметров просто нет. Как например толковой информации о процессоре.
Обратите внимание еще и на то, что для работы скрипта не требуются права администратора в Windows или суперпользователя в Linux. Все происходит от текущего пользователя с ограниченными правами в тихом и мирном режиме. Ничего, можно сказать, даже не шелохнется.
Хотя, тут, наверное, надо упомянуть, что, если собрать данный скрипт в exe с помощью того же PyInstaller, сразу же просыпается антивирусник и начинает почем зря лаять на бедную софтину. Мол троян, бэкдор, вредоносный код. Впрочем, как я почитал, антивирусники относятся к данного вида сборкам не очень благосклонно. Так как файл представляет собой не полноценный скомпилированный exe-файл, а что-то вроде архива, то во время работы он и распаковывается во временную директорию. А антивирусникам это не нравиться. Причем, независимо от того, какой у вас будет там код. Хоть «Hello Word» сделайте. А ругаться все равно будет. Так что, это не особо приятный факт. Но, думаю, что победить его можно. По крайней мере, нужно искать решения.
Полный код скрипта по сбору информации
import json import psutil from platform import uname def correct_size(bts, ending='iB'): size = 1024 for item in ["", "K", "M", "G", "T", "P"]: if bts < size: return f"" bts /= size def creating_file(): collect_info_dict = dict() if 'info' not in collect_info_dict: collect_info_dict['info'] = dict() collect_info_dict['info']['system_info'] = dict() collect_info_dict['info']['system_info'] = ", 'version': uname().version, 'machine': uname().machine>, 'processor': Мгц">, 'ram': > for partition in psutil.disk_partitions(): try: partition_usage = psutil.disk_usage(partition.mountpoint) except PermissionError: continue if 'disk_info' not in collect_info_dict['info']: collect_info_dict['info']['disk_info'] = dict() if f"'device': " not in collect_info_dict['info']['disk_info']: collect_info_dict['info']['disk_info'][partition.device] = dict() collect_info_dict['info']['disk_info'][partition.device] = '> for interface_name, interface_address in psutil.net_if_addrs().items(): if interface_name == 'Loopback Pseudo-Interface 1': continue else: if 'net_info' not in collect_info_dict['info']: collect_info_dict['info']['net_info'] = dict() if interface_name not in collect_info_dict['info']['net_info']: collect_info_dict['info']['net_info'][interface_name] = dict() collect_info_dict['info']['net_info'][interface_name] = < 'mac': interface_address[0].address.replace("-", ":"), 'ipv4': interface_address[1].address, 'ipv6': interface_address[2].address>return collect_info_dict def print_info(dict_info): for item in dict_info['info']: if item == "system_info": for elem in dict_info['info'][item]: if elem == 'system': print(f"[+] Информация о системе\n" f"\t- Имя компьютера: \n" f"\t- Опереционная система: \n" f"\t- Сборка: \n" f"\t- Архитектура: \n") if elem == 'processor': print(f"[+] Информация о процессоре\n" f"\t- Семейство: \n" f"\t- Физические ядра: \n" f"\t- Всего ядер: \n" f"\t- Максимальная частота: \n") if elem == 'ram': print(f"[+] Оперативная память\n" f"\t- Объем: \n" f"\t- Доступно: \n" f"\t- Используется: \n") if item == "disk_info": for elem in dict_info['info'][item]: print(f"[+] Информация о дисках\n" f"\t- Имя диска: \n" f"\t- Файловая система: \n" f"\t- Объем диска: \n" f"\t- Занято: \n" f"\t- Свободно: \n" f"\t- Заполненность: %\n") if item == "net_info": for elem in dict_info['info'][item]: print(f"[+] Информация о сети\n" f"\t- Имя интерфейса: \n" f"\t- MAC-адрес: \n" f"\t- IPv4: \n" f"\t- IPv6: \n") def main(): if uname().system == "Windows": dict_info = creating_file() with open(f'info_.json', 'w', encoding='utf-8') as file: json.dump(dict_info, file, indent=4, ensure_ascii=False) print_info(dict_info) elif uname().system == "Linux": dict_info = creating_file() with open(f'info_.json', 'w', encoding='utf-8') as file: json.dump(dict_info, file, indent=4, ensure_ascii=False) print_info(dict_info) if __name__ == "__main__": main()
А на этом, на сегодня, пожалуй, все. В следующей части добавим еще парочку функций, которые уже будут более детально шерстить Windows. Даже попробуем достать лицензионный ключ, с помощью которого она активируется, независимо от того, зашит ли он в BIOS или просто вводился вручную. Ну или это цифровая лицензия. До встречи в следующей части.
Спасибо за внимание. Надеюсь, что данный код будет кому-нибудь полезен
Получить частоту элементов в списке
Получить список элементов, которые встречаются в исходном списке более одного раза
Пролог версии 5.2, помогите пожалуйста, со списками разобраться совсем не могу.
Отсортировать в списке списков элементы по убыванию значений элементов в самом первом списке
Даны натуральные числа n, m>=2, список списков, состоящий из n элементов по m чисел в элементе.
Отсортировать в списке списков элементы по убыванию значений элементов в самом первом списке
Даны натуральные числа n, m>=2, список списков, состоящий из n элементов по m чисел в элементе.
Как получить частоту звука?
Здравствуйте! как получить частоту звука? MediaPlayer1.FileName := 'sound.mp3'; if.
![]()
![]()
35346 / 19946 / 4179
Регистрация: 12.02.2012
Сообщений: 33,093
Записей в блоге: 13

Сообщение было отмечено mik-a-el как решение
Решение
1 2 3 4 5 6 7 8
def freq(lst): d={} for a in lst: if d.get(a) is None: d[a]=1 else: d[a]+=1 return d
2738 / 1219 / 438
Регистрация: 21.11.2021
Сообщений: 2,474
1 2 3 4 5
from random import randint arr = sorted([randint(1,5) for _ in range(20)]) print(arr) fr = dict((x, (arr.count(x)/len(arr))) for x in set(arr)) print(fr)
![]()
![]()
35346 / 19946 / 4179
Регистрация: 12.02.2012
Сообщений: 33,093
Записей в блоге: 13
idealist, ужасно. Сортировка + O(n 2 )
Просто Лис
![]()
5321 / 3335 / 1021
Регистрация: 17.05.2012
Сообщений: 9,768
Записей в блоге: 9
1 2 3 4 5 6 7
>>> from collections import Counter >>> lst= [1,2,2,2,4,2] >>> c = Counter(lst) >>> c Counter({2: 4, 1: 1, 4: 1}) >>> dict(c) {1: 1, 2: 4, 4: 1}
2738 / 1219 / 438
Регистрация: 21.11.2021
Сообщений: 2,474
Сообщение от Catstail 
ужасно. Сортировка + O(n2)
Ну, я отсортировал для наглядности, чтобы видно было каких элементов сколько, на алгоритм это не влияет. А так-то стандартная сортировка наверно побыстрее, чем O(n2).
А вот каунтер-то мы с вами и не выучили
![]()
![]()
35346 / 19946 / 4179
Регистрация: 12.02.2012
Сообщений: 33,093
Записей в блоге: 13
idealist, нееет. Питоновская сортировка эффективна. Я о другом.
Сообщение от idealist 
arr.count(x)/len(arr))) for x in set(arr)
- вот здесь count-O(n) да еще внешний цикл O(n)
2738 / 1219 / 438
Регистрация: 21.11.2021
Сообщений: 2,474
Сообщение от Catstail 
- вот здесь count-O(n) да еще внешний цикл O(n)
А, да, согласен, алгоритм не очень эффективный.
![]()
![]()
35346 / 19946 / 4179
Регистрация: 12.02.2012
Сообщений: 33,093
Записей в блоге: 13
Сообщение от idealist 
А вот каунтер-то мы с вами и не выучили
- что до меня, то я и не собирался "учить". И вот почему. На Питоне я решаю в основном студ. задачи. И мне интересна их алгоритмическая "начинка". Если я займусь промышленным программированием на Питоне, то "каунтер" выучится сам.
Просто Лис
![]()
5321 / 3335 / 1021
Регистрация: 17.05.2012
Сообщений: 9,768
Записей в блоге: 9
Сообщение от Catstail 
На Питоне я решаю в основном студ. задачи. И мне интересна их алгоритмическая "начинка"
Это да, большинство задач в этом разделе именно требуют в решении базового синтаксиса, а не знание стандартных библиотек
Добавлено через 2 минуты
1 2 3 4 5 6
>>> lst= [1,2,2,2,4,2] >>> d = {} >>> for i in lst: d[i] = d.setdefault(i, 0) + 1 . >>> d {1: 1, 2: 4, 4: 1}
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Получить частоту ядра и оперативки
Как получить на c#: загруженность и частоту каждого ядра и оперативки на данный момен, а не по.
Получить тактовую частоту процессора
По этому поводу я уже создавал тему в разделе для начинающих.
Получить текущую тактовую частоту процессора
В Интернете я нашёл данный код, задался целью понять, как он работает. Для этого изучил WinAPI.

Получить заданную тактовую частоту на пин мк
Надо получить тактовую частоту на какой-нибудь выход мк, чтобы подать ее на микросхему. Желательно.
Как получить амплитуду и частоту звуковых сигналов?
Получение данных из входного буфера и обработка полученных сигналов звука. А конкретно как изъять.
