2013-06-09 2 views
0

시스템 정보를 얻으려고합니다. 타사 패키지와 라이브러리 또는 최신 버전의 Python을 실행해야하는 모듈은 설치하지 않아야합니다. 이것은 아직 초기 dev에 있고 현재 우분투 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'])) 

문제는 마지막 부분 I 적절한 메모리 통계를 얻을 수 있지만, 나는 또한 백분율 형식으로 "사용"부분을 추가 할 필요가 있다는 것입니다. 그래도 수학을 올바르게 얻는 방법을 알 수는 없습니다.

내가 작업하는 시스템 중 일부는 RAM에서 탭 아웃 될 수 있으므로 스크립트를 컴퓨터에 충돌시키지 않아서 RAM 비율을 평가하기 위해 여기에 뭔가를 추가해야하므로 CPU 사용률이 75 % 이상이고 RAM 잔량이 5 % 미만인 경우와 같은 특정 조건이 존재하는 경우 CPU 비율을 유지합니다. 나는이 기능들에 대한 통찰력을 원하지만, 지금 당면한 주요 관심사는 메모리 사용률을 얻는 것이다. 나는 몇 시간 동안이 일을하고 있었고 신선한 눈을 쓸 수있었습니다. 감사!

답변

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() 

출력 : -m이 메가 바이트의 모든를 출력

{'used': '3292', 'buffers': '105', 'cached': '2063', 'shared': '0', 'total': '3550', 'free': '257'} 

참고. -k (킬로바이트), -g (기가 바이트) 또는 free (바이트 단위)을 사용할 수 있습니다.

free은/proc/meminfo가 거의 모든 곳에서 사용 가능해야합니다. 원래의 질문으로

, 당신이 사용하는 것이 사용 비율을 얻을 수 있습니다 :

used/total 

또는

(total-free)/total 

을하지만 사용 된 값 중 하나를 포함으로이 리눅스에 오해의 소지가 될 수 있습니다 캐시 된 파일. 그래서 사용하는 것이 말하자면 잠겨 메모리의 정말 정확한 카운트 :

(used-cached)/total 

또는

(total-free-cached)/total 
+0

이것은 내가 게시 된 질문의 대한 답변하지 않습니다. 다른 도구 나 * nix cmd를 사용하고 싶지 않습니다. 나는 단순히 나의 이전 포스트에 추가를 찾고있다. 임계 값을 초과하는 경우 스크립트를 중지 할 수 있도록 얼마만큼의 RAM이 백분율로 사용되는지 만 필요합니다. 그것은 MemUsotal에서 MemFree를 뺀 다음이를 Percent로 변환하는 것과 같아야합니다. – user1675042

+0

가혹한 것처럼 들리면 사과드립니다. 나는 그것을 읽었을 뿐이라고 생각하지 않았다. 내가 가지고있는 스크립트는 깨끗한 결과물을 가지고 있으며, 중학교의 일부가이 스크립트를 사용하기 때문에 그대로 유지하고 싶습니다. 속도를 높이는 데 도움이되는 손상된 서버 조사 스크립트의 시작입니다. 우리는 많은 서버를 가지고 있으며 시스템에서 패키지/소프트웨어를 설치하거나 제거 할 수 없습니다. 나는 그 대답을 고맙게 여긴다. 그러나 내가 찾고있는 것이 아니다. 고맙습니다. – user1675042

+2

예, 정확한 질문에 답하지 않았습니다. 내 업데이트 답변을 참조하십시오.현재 코드의 문제점은'''meminfo'''는''' ''1343434 kb'''' 같은 것들, 즉 int로 직접 변환 될 수없는 문자열을 포함한다는 것입니다. – korylprince

관련 문제