2010-01-07 6 views

답변

11

wmi 모듈을 사용하려고합니다. 이 같은 것을 :

import wmi 
comp = wmi.WMI() 

for i in comp.Win32_ComputerSystem(): 
    print i.TotalPhysicalMemory, "bytes of physical memory" 

for os in comp.Win32_OperatingSystem(): 
    print os.FreePhysicalMemory, "bytes of available memory" 
+0

죄송합니다. 총 물리적 메모리를 가져옵니다 (분명히). 사용 가능한/사용 가능한 메모리를 확보하기위한 WMI 명령을 찾을 때까지 올바른 방향으로 단계를 진행하므로 열어 두겠습니다. –

+1

+1. 올바른 데이터를 가져 오려면 이것을 변경하는 것이 간단합니다. – Skurmedel

+0

@NigelHeffernan 기존 답변은 이미 Win32_OperatingSystem을 사용하여 FreePhysicalMemory에 액세스합니다. –

0

WMI에서 성능 카운터를 쿼리 할 수 ​​있습니다. 비슷한 일을했지만 디스크 공간을 대신 사용했습니다.

매우 유용한 링크는 Python WMI Tutorial by Tim Golden입니다.

18

또한 단지 바로 파이썬에서 GlobalMemoryStatusEx() (또는 다른 KERNEL32 나 USER32 수출)를 호출 할 수 있습니다

반드시이 경우 WMI 유용하지만, 확실히에있는 멋진 트릭
import ctypes 

class MEMORYSTATUSEX(ctypes.Structure): 
    _fields_ = [ 
     ("dwLength", ctypes.c_ulong), 
     ("dwMemoryLoad", ctypes.c_ulong), 
     ("ullTotalPhys", ctypes.c_ulonglong), 
     ("ullAvailPhys", ctypes.c_ulonglong), 
     ("ullTotalPageFile", ctypes.c_ulonglong), 
     ("ullAvailPageFile", ctypes.c_ulonglong), 
     ("ullTotalVirtual", ctypes.c_ulonglong), 
     ("ullAvailVirtual", ctypes.c_ulonglong), 
     ("sullAvailExtendedVirtual", ctypes.c_ulonglong), 
    ] 

    def __init__(self): 
     # have to initialize this to the size of MEMORYSTATUSEX 
     self.dwLength = ctypes.sizeof(self) 
     super(MEMORYSTATUSEX, self).__init__() 

stat = MEMORYSTATUSEX() 
ctypes.windll.kernel32.GlobalMemoryStatusEx(ctypes.byref(stat)) 

print("MemoryLoad: %d%%" % (stat.dwMemoryLoad)) 

하지 않음 뒷주머니.

+0

이건 정말 끝내 주었는데, Windows에서이 일을 할 수 있을지 전혀 몰랐습니다. – Anders

+0

그게 __init__의 반환입니까? 왜 그걸 할거야? – Arafangion

+0

dwLength가 이전에 초기화되었고 다른 _fields_는 초기화 될 필요가 없으므로 super 호출을 생략 할 수 있습니다. – phobie

관련 문제