クロスプラットフォーム ソリューションの最善の策は、psutil パッケージ (PyPI で入手可能) を使用することです。
import psutil
psutil.virtual_memory().total # total physical memory in Bytes
virtual_memory
のドキュメント
使用 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 の場合 、ユーザー レポートによると、これは Python 3.7 では機能しますが、Python 3.8 では機能しません。
/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
正規表現はこのような場合にうまく機能し、ディストリビューション間の小さな違いを解決するのに役立ちます。
import re
with open('/proc/meminfo') as f:
meminfo = f.read()
matched = re.search(r'^MemTotal:\s+(\d+)', meminfo)
if matched:
mem_total_kB = int(matched.groups()[0])