Python将物理内存转换为固定值

时间:2018-02-28 15:38:57

标签: python python-2.7 psutil

我正在尝试将总物理内存转换为贴值,即128gb,64gb ..等。

如果我从我的服务器获取总ram的值,例如16826298368,并运行此代码,我得到并预期输出为16gb。哪个好。但随着记忆值的增加,它开始漂移 示例:134931955712生成126GB,预计128GB。 示例:67519483904产生63GB,预计64GB。

所以我的问题是,当价值发生变化时,我如何修改以获得预期的输出?根据OS,存储器值由几个不同的代码位提供。例如,我们在Solaris上使用psutil。 psutil.virtual_memory()。总

def transform_memory(data):
    for x in ["bytes", " KB", " MB", " GB"]:
        if data < 1024.0:
            return "%3.1f%s" % (math.ceil(data), x)
        data /= 1024.0
    return "%3.1f%s" % (data, " TB")

1 个答案:

答案 0 :(得分:0)

试试这个:

import psutil

def bytes2human(n):
    # http://code.activestate.com/recipes/578019
    # >>> bytes2human(10000)
    # '9.8K'
    # >>> bytes2human(100001221)
    # '95.4M'
    symbols = ('K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y')
    prefix = {}
    for i, s in enumerate(symbols):
        prefix[s] = 1 << (i + 1) * 10
    for s in reversed(symbols):
        if n >= prefix[s]:
            value = float(n) / prefix[s]
            return '%.1f%s' % (value, s)
    return "%sB" % n

total = psutil.disk_usage('/').total
print(total)
print(bytes2human(total))

...打印:

100399730688
93.5G

由于这是一个常见的用例,我只是将上面的内容添加到psutil doc: http://psutil.readthedocs.io/en/latest/#bytes-conversion