2010-01-07 12 views
12

के साथ कंप्यूटर का मेमोरी उपयोग प्राप्त करें मैं कैसे बता सकता हूं कि कंप्यूटर का समग्र मेमोरी उपयोग पाइथन से क्या है, जो विंडोज एक्सपी पर चल रहा है?विंडोज़ में पाइथन

उत्तर

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

आप डब्लूएमआई में प्रदर्शन काउंटर से पूछ सकते हैं। मैंने कुछ ऐसा किया है लेकिन इसके बजाय डिस्क स्पेस के साथ।

Python WMI Tutorial by Tim Golden एक बहुत उपयोगी लिंक है।

18

आप, साथ ही GlobalMemoryStatusEx() (या किसी अन्य kernel32 या user32 निर्यात) कॉल कर सकते हैं अजगर से सीधे:

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)) 
नहीं

जरूरी रूप में इस मामले में WMI के रूप में उपयोगी है, लेकिन निश्चित रूप से एक अच्छा चाल में है करने के लिए आपकी पीठ जेब

+0

यह एक अद्भुत था, आपको नहीं पता था कि आप विंडोज़ में ऐसा कर सकते हैं। – Anders

+0

यह __init__ में वापसी है? तुम ऐसा क्यों करोगे? – Arafangion

+0

सुपर कॉल को छोड़ा जा सकता है क्योंकि dwLength पहले शुरू किया गया है और अन्य _fields_ को प्रारंभ करने की आवश्यकता नहीं है। – phobie

संबंधित मुद्दे