Подтвердить что ты не робот

Получить полную физическую память в Python

Как я могу получить полную физическую память в Python в агностике распределения? Мне не нужна используемая память, а всего полная физическая память.

4b9b3361

Ответ 1

наилучшим выбором для кросс-платформенного решения является использование пакета psutil (доступно на PyPI).

from psutil import virtual_memory

mem = virtual_memory()
mem.total  # total physical memory available

Документация для virtual_memory здесь.

Ответ 2

Использование os.sysconf в Linux:

import os
mem_bytes = os.sysconf('SC_PAGE_SIZE') * os.sysconf('SC_PHYS_PAGES')  # e.g. 4015976448
mem_gib = mem_bytes/(1024.**3)  # e.g. 3.74

Примечание:

  • SC_PAGE_SIZE часто 4096.
  • SC_PAGESIZE и SC_PAGE_SIZE равны.
  • Для получения дополнительной информации см. man sysconf.
  • Для MacOS, за непроверенный отчет пользователя, это может работать только с версией MacOS ≥ 10.13 (High Sierra) и Python ≥ 3.6.4.

Использование /proc/meminfo в Linux:

meminfo = dict((i.split()[0].rstrip(':'),int(i.split()[1])) for i in open('/proc/meminfo').readlines())
mem_kib = meminfo['MemTotal']  # e.g. 3921852

Ответ 3

Регулярные выражения хорошо работают для такого рода вещей и могут помочь с любыми незначительными различиями между дистрибутивами.

import re
meminfo = open('/proc/meminfo').read()
matched = re.search(r'^MemTotal:\s+(\d+)', meminfo)
if matched: 
    mem_total_kB = int(matched.groups()[0])

Ответ 4

Этот код работал у меня без какой-либо внешней библиотеки на Python 2.7.9

import os
mem=str(os.popen('free -t -m').readlines())
"""
Get a whole line of memory output, it will be something like below
['             total       used       free     shared    buffers     cached\n', 
'Mem:           925        591        334         14         30        355\n', 
'-/+ buffers/cache:        205        719\n', 
'Swap:           99          0         99\n', 
'Total:        1025        591        434\n']
 So, we need total memory, usage and free memory.
 We should find the index of capital T which is unique at this string
"""
T_ind=mem.index('T')
"""
Than, we can recreate the string with this information. After T we have,
"Total:        " which has 14 characters, so we can start from index of T +14
and last 4 characters are also not necessary.
We can create a new sub-string using this information
"""
mem_G=mem[T_ind+14:-4]
"""
The result will be like
1025        603        422
we need to find first index of the first space, and we can start our substring
from from 0 to this index number, this will give us the string of total memory
"""
S1_ind=mem_G.index(' ')
mem_T=mem_G[0:S1_ind]

print 'Summary = ' + mem_G
print 'Total Memory = ' + mem_T +' MB'

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

    """
        Similarly we will create a new sub-string, which will start at the second value. 
        The resulting string will be like
        603        422
        Again, we should find the index of first space and than the 
        take the Used Memory and Free memory.
        """
        mem_G1=mem_G[S1_ind+8:]
        S2_ind=mem_G1.index(' ')
        mem_U=mem_G1[0:S2_ind]

        mem_F=mem_G1[S2_ind+8:]
    print 'Used Memory = ' + mem_U +' MB'
    print 'Free Memory = ' + mem_F +' MB'