Ich versuche, den gesamten/verfügbaren virtuellen Speicher in Python mit Ctypes zu erhalten, aber es scheint einen sehr falschen Wert zurückzugeben. unten ist der Code, ich habe zur Zeitinkorrekter virtueller Speicherbericht mit Ctypes in Windows
import ctypes
import ctypes.wintypes as wintypes
def _get_virtual_size():
class MEMORYSTATUSEX(ctypes.Structure):
_fields_ = [("dwLength", wintypes.DWORD),
("dwMemoryLoad", wintypes.DWORD),
("ullTotalPhys", ctypes.c_uint64),
("ullAvailPhys", ctypes.c_uint64),
("ullTotalPageFile", ctypes.c_uint64),
("ullAvailPageFile", ctypes.c_uint64),
("ullTotalVirtual", ctypes.c_uint64),
("ullAvailVirtual", ctypes.c_uint64),
("ullAvailExtendedVirtual", ctypes.c_uint64)]
def __init__(self):
ctypes.Structure.__init__(self)
self.dwLength = ctypes.sizeof(self)
kernel32 = ctypes.WinDLL("kernel32", use_last_error=True)
GlobalMemoryStatusEx = kernel32.GlobalMemoryStatusEx
GlobalMemoryStatusEx.restype = wintypes.BOOL
GlobalMemoryStatusEx.argtypes = [ctypes.POINTER(MEMORYSTATUSEX)]
status = MEMORYSTATUSEX()
if GlobalMemoryStatusEx(status):
return {'totalPage':status.ullAvailPageFile, 'total':status.ullTotalVirtual, 'available':status.ullAvailVirtual}
return None
print _get_virtual_size()
Ergebnis: { 'verfügbar': 140737380003840L, 'totalPage': 13305126912L, 'total': 140737488224256L}
Hinweis: Die Verwendung psutil der Wert scheint korrekt gemeldet werden, aber eine Lösung ohne psutil benötigen.
import psutil
print psutil.virtual_memory()
Ergebnis: svmem (gesamt = 17114841088L, verfügbar = 13436207104L, Prozent = 21,5, verwendet = 3678633984L, frei = 13436207104L)
Wie ich die gleichen Werte von psutil gemeldet bekommen Sie mit die Ctypes-Methode. Ich führe derzeit den obigen Code in Python 2.7.10 64Bit unter Windows 8.1
Jede Hilfe wäre willkommen.
'MEMORYSTATUSEX' struct hat 7 Felder zur Information, Sie haben nur drei von ihnen überprüft. –