Python系统资源枚举

时间:2013-06-09 04:16:49

标签: python cpu enumeration ram

我正在尝试获取系统信息。我必须避免安装需要运行最新版python的第三方软件包和库或模块。这仍然是早期开发,目前只在Ubuntu 10.04上测试过,但我稍后会玩。我在获取内存使用的正确信息方面遇到了麻烦。

到目前为止,我所拥有的是:

#! /usr/bin/python

import platform
import multiprocessing
import os

print "\nEnumerating Available System Resources..."

print "\n++++++++++ OS Name and version ++++++++++"

print "Platform:", platform.system()
print "Kernel:", platform.release()
print "Distro:", platform.linux_distribution()
print "Architecture:", platform.architecture()

print "\n++++++++++ CPU Cores ++++++++++"
p = os.popen("ps aux|awk 'NR > 0{s +=$3};END{print s}'").read()
print "Cores:", multiprocessing.cpu_count(), '\nCPU Load:', p

print "\n++++++++++ System Memory ++++++++++\n"

def meminfo():
    meminfo=dict()

    with os.popen('cat /proc/meminfo') as f:
        for line in f:
            meminfo[line.split(':')[0]] = line.split(':')[1].strip()
    return meminfo

if __name__=='__main__':
    meminfo = meminfo()
    print('Total Memory: {0}'.format(meminfo['MemTotal']))
    print('Free Memory: {0}'.format(meminfo['MemFree']))

问题是最后一部分我获得了正确的内存统计信息,但我还需要以百分比格式添加“使用”部分。但是,我无法弄清楚如何正确地计算数学。

我需要这个,因为我工作的一些系统可能会在ram上被轻敲,我不能让脚本崩溃机器所以我还需要在这里添加一些东西来评估RAM百分比和CPU如果存在某些条件,例如CPU负载超过75%且RAM少于5%,则不会继续百分比。我想对这些功能有所了解,但现在主要关注的是获取内存使用百分比。我已经在这几个小时了,可以用一些新鲜的眼睛。谢谢!

1 个答案:

答案 0 :(得分:3)

如何使用free命令?

import os
import re
def meminfo():

    with os.popen('free -m') as f:
        output = f.read()

    fields = re.search(r'Mem\:\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)',
            output,re.M).group
    return dict(total=fields(1),used=fields(2),free=fields(3),
            shared=fields(4),buffers=fields(5),cached=fields(6))

print meminfo()

输出:

{'used': '3292', 'buffers': '105', 'cached': '2063', 'shared': '0', 'total': '3550', 'free': '257'}

请注意-m以兆字节为单位输出所有内容。您可以使用-k表示千字节,-g表示千兆字节,或者只使用free表示以字节为单位输出。

free几乎可以在/ proc / meminfo的任何地方使用。

关于您的原始问题,要获得使用百分比,您将使用:

used/total

(total-free)/total

但请注意,这可能会误导linux,因为使用的值包含任何缓存文件。因此,对于一个非常准确的锁定内存计数,您可以使用:

(used-cached)/total

(total-free-cached)/total