<[EMAIL PROTECTED]> <[EMAIL PROTECTED]>
Message-ID: <[EMAIL PROTECTED]>
X-Sender: [EMAIL PROTECTED]
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
<[EMAIL PROTECTED]> wrote:
> Francesco Stablum ha scritto:
>> 2008/6/27 Manlio Perillo <[EMAIL PROTECTED]>:
>>> /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

_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a