[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