# Copyright 2013-2019 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 import os import platform import subprocess from portage import _unicode_decode def get_vm_info(): vm_info = {} env = os.environ.copy() env["LC_ALL"] = "C" if platform.system() == 'Linux': try: proc = subprocess.Popen(["free"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, env=env) except OSError: pass else: output = _unicode_decode(proc.communicate()[0]) if proc.wait() == os.EX_OK: for line in output.splitlines(): line = line.split() if len(line) < 2: continue if line[0] == "Mem:": try: vm_info["ram.total"] = int(line[1]) * 1024 except ValueError: pass if len(line) > 3: try: vm_info["ram.free"] = int(line[3]) * 1024 except ValueError: pass elif line[0] == "Swap:": try: vm_info["swap.total"] = int(line[1]) * 1024 except ValueError: pass if len(line) > 3: try: vm_info["swap.free"] = int(line[3]) * 1024 except ValueError: pass else: try: proc = subprocess.Popen(["sysctl", "-a"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, env=env) except OSError: pass else: output = _unicode_decode(proc.communicate()[0]) if proc.wait() == os.EX_OK: for line in output.splitlines(): line = line.split(":", 1) if len(line) != 2: continue line[1] = line[1].strip() if line[0] == "hw.physmem": try: vm_info["ram.total"] = int(line[1]) except ValueError: pass elif line[0] == "vm.swap_total": try: vm_info["swap.total"] = int(line[1]) except ValueError: pass elif line[0] == "Free Memory Pages": if line[1][-1] == "K": try: vm_info["ram.free"] = int(line[1][:-1]) * 1024 except ValueError: pass return vm_info