我正在尝试获取系统信息。我必须避免安装需要运行最新版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%,则不会继续百分比。我想对这些功能有所了解,但现在主要关注的是获取内存使用百分比。我已经在这几个小时了,可以用一些新鲜的眼睛。谢谢!
答案 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