Wie kann ich feststellen, wie viel Speicher der gesamte Computer von Python verwendet, der auf Windows XP ausgeführt wird?Ermitteln der Speichernutzung des Computers in Windows mit Python
Antwort
Sie möchten das Modul wmi verwenden. Etwas wie dieses:
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"
Sie können die Leistungsindikatoren in WMI abfragen. Ich habe etwas ähnliches, aber mit Speicherplatz statt.
Eine sehr nützliche Verbindung ist die Python WMI Tutorial by Tim Golden.
Sie können auch anrufen nur GlobalMemoryStatusEx() (oder anderen kernel32 oder user32 Export) direkt aus Python:
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))
Nicht unbedingt so nützlich wie WMI in diesem Fall, aber auf jeden Fall einen netten Trick zu haben deine Gesäßtasche.
Dieser war großartig, hatte keine Ahnung, dass Sie das in Windows tun könnten. – Anders
Das ist eine Rückkehr in __init__? Warum würdest du das tun? – Arafangion
Der Superaufruf kann weggelassen werden, da dwLength zuvor initialisiert wurde und die anderen _fields_ nicht initialisiert werden müssen. – phobie
Es tut mir leid, das bekommt den gesamten physikalischen Speicher (offensichtlich) - ich werde offen lassen, da es ein Schritt in die richtige Richtung ist, bis ich den WMI-Befehl finde, um den belegten/freien Speicher zu bekommen. –
+1. Es wird trivial sein, dies zu ändern, um die richtigen Daten zu holen. – Skurmedel
@NigelHeffernan Die vorhandene Antwort verwendet bereits Win32_OperatingSystem, um auf FreePhysicalMemory zuzugreifen. –