[Python] Ram libera sotto Linux

Daniele Varrazzo piro a develer.com
Lun 30 Giu 2008 12:14:52 CEST


<377fd1f30806300045i5172cf6as852486a6f360fa6b a mail.gmail.com> <48689DF5.3040007 a libero.it>
Message-ID: <73239c8fdfa782922cd1335bf536c5f3 a develer.com>
X-Sender: piro a develer.com
Received: from 82.111.147.97 [82.111.147.97] with HTTP/1.1 (POST); Mon, 30 Jun
	2008 12:14:52 +0200
User-Agent: RoundCube Webmail/0.1
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit



On Mon, 30 Jun 2008 10:48:53 +0200, Manlio Perillo
<manlio_perillo a libero.it> wrote:
> Francesco Stablum ha scritto:
>> 2008/6/27 Manlio Perillo <manlio_perillo a libero.it>:
>>> /proc/meminfo.
>> 
>> Puo' funzionare. Se pero' pensiamo che il python e' un linguaggio che
>> va su varie piattaforme questo approccio mi sembra deleterio; mi
>> ricorda le serie di #ifdef in C.
>> La soluzione potrebbe essere creare una libreria che fornisca questi
>> attributi e nasconda la dipendenza da uno specifico sistema operativo.
> 
> Certo, ma l'OP ha espressamente richiesto la soluzione per Linux.
> 
>> Mi stupisco se non e' ancora stata realizzata.
> 
> Magari esiste qualche C API che implementa la cosa, ma che io sappia in 
> POSIX non รจ definito niente a riguardo.

Esiste una API per la lettura della memoria, ed e' esattamente il file
/proc/meminfo. E' una API implementata come file system, il che e'
totalmente geniale in quanto e' perfettamente leggibile da qualunque
processo in qualunque linguaggio. 

Quindi ok con il parsing, ma non dell'output di free, che rende la cosa
inutilmente fragile, tra l'altro free e' implementato esattamente leggendo
/proc/meminfo, come

    strace free 2>&1 | grep open

rivela.

parsare /proc/meminfo e' assolutamente banale, by design:

    import re
    remem = re.compile(r"^([^:]+):\s*([0-9]+)\s+kB")
    rv = {}

    for row in open("/proc/meminfo"):
        m = remem.match(row)
        rv[m.group(1)] = int(m.group(2))

in rv trovi tutte le informazioni che ti possono servire.

-- 
Daniele Varrazzo - Develer S.r.l.
http://www.develer.com



Maggiori informazioni sulla lista Python