簡體   English   中英

Python系統資源枚舉

[英]Python system resources enumeration

我正在嘗試獲取系統信息。 我必須避免安裝需要運行最新版本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%,則繼續操作。 我想對這些功能有一些了解,但是現在最主要的問題是獲取內存使用百分比。 我已經在這里待了幾個小時,可能會用一些新鮮的眼睛。 謝謝!

改用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM