Python系统资源枚举
我正在尝试获取系统信息。我必须避免安装需要运行最新版本python的第三方软件包、库或模块。这仍在早期开发阶段,目前仅在Ubuntu 10.04上测试,但我将在稍后使用它。我在获取正确的内存使用信息方面遇到了问题 到目前为止,我得到的是:Python系统资源枚举,python,cpu,enumeration,ram,Python,Cpu,Enumeration,Ram,我正在尝试获取系统信息。我必须避免安装需要运行最新版本python的第三方软件包、库或模块。这仍在早期开发阶段,目前仅在Ubuntu 10.04上测试,但我将在稍后使用它。我在获取正确的内存使用信息方面遇到了问题 到目前为止,我得到的是: #! /usr/bin/python import platform import multiprocessing import os print "\nEnumerating Available System Resources..." print "
#! /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%,则不继续。我想了解一下这些函数,但现在主要关心的是内存使用率。我已经做了几个小时了,需要一些新鲜的眼睛。谢谢 改用
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
以字节为单位输出
免费
应该可以在/proc/meminfo所在的任何地方使用
至于您最初的问题,要获得使用百分比,您将使用:
used/total
(used-cached)/total
或
但请注意,这在linux上可能会产生误导,因为使用的值包括任何缓存文件。因此,要真正准确地计算被锁定的内存,您可以使用:
used/total
(used-cached)/total
或
改用
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
以字节为单位输出
免费
应该可以在/proc/meminfo所在的任何地方使用
至于您最初的问题,要获得使用百分比,您将使用:
used/total
(used-cached)/total
或
但请注意,这在linux上可能会产生误导,因为使用的值包括任何缓存文件。因此,要真正准确地计算被锁定的内存,您可以使用:
used/total
(used-cached)/total
或
这不是对我发布的任何问题的回答。我不想使用任何其他工具或*nix cmd。我只是想在我以前的帖子中增加一个。我只需要以百分比表示使用了多少ram,以便在脚本超过阈值时停止脚本。这应该是从MemTotal中减去MemFree得到MemUsed,然后将其转换成一个百分比。如果这听起来很刺耳,我很抱歉。我只是读了它,并不是故意让它听起来那么糟糕。我的脚本有一个干净的输出,我希望保持这种方式,因为一些年轻人将使用这个脚本。这是一个受损服务器调查脚本的开始,有助于加快速度。我们有很多服务器,无法从系统中安装或删除软件包/软件。我很感激你的回答,但这不是我想要的。谢谢。是的,我忘了回答确切的问题。请参阅我的最新答案。当前代码的问题是
meminfo
包含类似于'1343434 kb'
的内容,即无法直接转换为整数的字符串。谢谢。我没想到。我仍然无法让它返回百分比。我一直在尝试你提供的方法。我应该把(已用缓存)/总计放在哪里?比如说,您有used=100
,cached=100
,和total=400
。然后您可以执行类似于percent=(已用缓存)/total的操作。你可以将结果乘以100,得到100的值(即0-100而不是0-1)。这不是对我发布的任何问题的回答。我不想使用任何其他工具或*nix cmd。我只是想在我以前的帖子中增加一个。我只需要以百分比表示使用了多少ram,以便在脚本超过阈值时停止脚本。这应该是从MemTotal中减去MemFree得到MemUsed,然后将其转换成一个百分比。如果这听起来很刺耳,我很抱歉。我只是读了它,并不是故意让它听起来那么糟糕。我的脚本有一个干净的输出,我希望保持这种方式,因为一些年轻人将使用这个脚本。这是一个受损服务器调查脚本的开始,有助于加快速度。我们有很多服务器,无法从系统中安装或删除软件包/软件。我很感激你的回答,但这不是我想要的。谢谢。是的,我忘了回答确切的问题。请参阅我的最新答案。当前代码的问题是meminfo
包含类似于'1343434 kb'
的内容,即无法直接转换为整数的字符串。谢谢。我没想到。我仍然无法让它返回百分比。我一直在尝试你提供的方法。我应该把(已用缓存)/总计放在哪里?比如说,您有used=100
,cached=100
,和total=400
。然后您可以执行类似于percent=(已用缓存)/total的操作。您可以将结果乘以100,得到100的缩放值(即0-100而不是0-1)。