[英]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.