How to get Windows physical RAM using python?
Bengt Richter
bokr at oz.net
Thu Jul 31 13:53:09 EDT 2003
On Wed, 30 Jul 2003 23:04:56 +0200, =?ISO-8859-1?Q?=22Martin_v=2E_L=F6wis=22?= <martin at v.loewis.de> wrote:
>Mark wrote:
>
>> OK, How to check the amount of Windows physical RAM using python?
>
>You should call the GlobalMemoryStatus(Ex) function. To my knowledge,
>there is no Python wrapper for it, yet, so you would need to write one.
>
>Regards,
>Martin
>
====< memorystatus.c >=============================================
/*
** memorystatus.c
** Version 0.01 20030731 10:45:12 Bengt Richter bokr at oz.net
**
*/
#include "Python.h"
#include <windows.h>
static char doc_memstat[] =
"Returns list of 7 integers:\n"
" [0]: percent of memory in use\n"
" [1]: bytes of physical memory\n"
" [2]: free physical memory bytes\n"
" [3]: bytes of paging file\n"
" [4]: free bytes of paging file\n"
" [5]: user bytes of address space\n"
" [6]: free user bytes\n";
static PyObject *
memorystatus_memstat(PyObject *self, PyObject *args)
{
PyObject *rv;
MEMORYSTATUS ms;
GlobalMemoryStatus( &ms );
if (!PyArg_ParseTuple(args, "")) /* No arguments */
return NULL;
rv = Py_BuildValue("[i,i,i,i,i,i,i]",
ms.dwMemoryLoad, // percent of memory in use
ms.dwTotalPhys, // bytes of physical memory
ms.dwAvailPhys, // free physical memory bytes
ms.dwTotalPageFile, // bytes of paging file
ms.dwAvailPageFile, // free bytes of paging file
ms.dwTotalVirtual, // user bytes of address space
ms.dwAvailVirtual // free user bytes
);
return rv;
}
/* List of functions defined in the module */
static struct PyMethodDef memorystatus_module_methods[] = {
{"memstat", memorystatus_memstat, METH_VARARGS, doc_memstat},
{NULL, NULL} /* sentinel */
};
/* Initialization function for the module (*must* be called initmemorystatus) */
static char doc_memorystatus[] = "Get win32 memory status numbers (see memstat method)";
DL_EXPORT(void)
initmemorystatus(void)
{
PyObject *m, *d, *x;
/* Create the module and add the functions */
m = Py_InitModule("memorystatus", memorystatus_module_methods);
d = PyModule_GetDict(m);
x = PyString_FromString(doc_memorystatus);
PyDict_SetItemString(d, "__doc__", x);
Py_XDECREF(x);
}
===================================================================
You may find a little .cmd file like this (tailored to your system) handy:
[10:55] C:\pywk\ut\memorystatus>type \util\mkpydll.cmd
@cl -LD -nologo -Id:\python22\include %1.c -link -LIBPATH:D:\python22\libs -export:init%1
[10:56] C:\pywk\ut\memorystatus>mkpydll memorystatus
memorystatus.c
Creating library memorystatus.lib and object memorystatus.exp
[10:56] C:\pywk\ut\memorystatus>python
(I'll indent this one space to avoid spurious quote highlights)
Python 2.2.2 (#37, Oct 14 2002, 17:02:34) [MSC 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import memorystatus
>>> help(memorystatus)
Help on module memorystatus:
NAME
memorystatus - Get win32 memory status numbers (see memstat method)
FILE
c:\pywk\ut\memorystatus\memorystatus.dll
FUNCTIONS
memstat(...)
Returns list of 7 integers:
[0]: percent of memory in use
[1]: bytes of physical memory
[2]: free physical memory bytes
[3]: bytes of paging file
[4]: free bytes of paging file
[5]: user bytes of address space
[6]: free user bytes
DATA
__file__ = 'memorystatus.dll'
__name__ = 'memorystatus'
>>> memorystatus.memstat()
[0, 334929920, 271536128, 942825472, 861339648, 2147352576, 2129780736]
Warning: Just now did this. Not tested beyond what you see!!
Regards,
Bengt Richter
More information about the Python-list
mailing list