How to get Windows physical RAM using python?
Mark Hammond
mhammond at skippinet.com.au
Thu Jul 31 19:02:03 EDT 2003
Why not submit that as a patch to win32all <wink>?
Mark.
Bengt Richter wrote:
> 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