diff options
author | Zac Medico <zmedico@gentoo.org> | 2013-01-16 06:11:55 -0800 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2013-01-16 06:11:55 -0800 |
commit | 9a3a82fda113008b877c0447e1d6a8780365ab98 (patch) | |
tree | 3ef8681308c787ffdede6393e7b586cf8c5dd7ca /pym/portage | |
parent | 5978d78f56f0708d3bbbcdb9adc1b96097f3d034 (diff) | |
download | portage-9a3a82fda113008b877c0447e1d6a8780365ab98.tar.gz portage-9a3a82fda113008b877c0447e1d6a8780365ab98.tar.bz2 portage-9a3a82fda113008b877c0447e1d6a8780365ab98.zip |
emerge --info: show free ram/swap, bug #451048
Diffstat (limited to 'pym/portage')
-rw-r--r-- | pym/portage/util/_get_vm_info.py | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/pym/portage/util/_get_vm_info.py b/pym/portage/util/_get_vm_info.py new file mode 100644 index 000000000..e8ad93805 --- /dev/null +++ b/pym/portage/util/_get_vm_info.py @@ -0,0 +1,80 @@ +# Copyright 2013 Gentoo Foundation +# 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 = {} + + if platform.system() == 'Linux': + try: + proc = subprocess.Popen(["free"], + stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + 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) + 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 |