Seite 1 von 2

verfügbaren RAM ermitteln

Verfasst: Donnerstag 26. März 2009, 14:00
von CM
Hoi,

Zum Ermitteln des verfügbaren RAMs habe ich mir dies ergoogelt. Mal abgesehen davon, dass os.popen nicht der letzte Schrei ist: Geht das so? Insbesondere unter Windows, was ich nicht testen kann, ist 'nt' da noch aktuell? Oder wie würdet ihr das machen?

Falls es das Thema schon mal gab: Ich habe es nicht gefunden.

Gruß,
Christian

Verfasst: Donnerstag 26. März 2009, 14:52
von jerch
Wie wärs unter linux mit open('/proc/meminfo')? Keine Ahnung, was Windows hier angeht.

Verfasst: Donnerstag 26. März 2009, 15:00
von CM
Na ja, das ist in der Tat erst einmal einfacher als den Aufruf von "free". :-) Danke.

Frage: Ist das auf allen posix-Systemen gleich aufgebaut?

Gruß,
Christian

Verfasst: Donnerstag 26. März 2009, 15:30
von jerch
Frage: Ist das auf allen posix-Systemen gleich aufgebaut?
Davon würd ich nicht ausgehen, zumindest unter AIX ist es wohl auf "Linux-Norm" gehievt. Für andere Unices müßte das halt getestet werden. Dasselbe gilt aber auch für den "free"-Weg, da sich die Ausgaben der einzelnen Unixvarianten dann doch hin und wieder mal unterscheiden bzw. im Detail anders gelöst sind.

Verfasst: Donnerstag 26. März 2009, 15:30
von kbr
CM hat geschrieben:Frage: Ist das auf allen posix-Systemen gleich aufgebaut?

Gruß,
Christian
Also, bei FreeBSD und Mac OS X geht das so nicht. Dort kenne ich nur die Möglichkeit die Speicherbelegung mit "top" zu erfahren (abgesehen von OS X GUI Tools).

Verfasst: Donnerstag 26. März 2009, 15:36
von CM
kbr hat geschrieben:... Mac OS X geht das so nicht.
Oh ja, ich erinnere mich - OSX ist da etwas anders. Danke.

Verfasst: Donnerstag 26. März 2009, 16:50
von lunar
Was ist mit "free"? Dessen Ausgabe dürfte leichter zu parsen sein ..

Verfasst: Donnerstag 26. März 2009, 20:36
von Darii
kbr hat geschrieben:Dort kenne ich nur die Möglichkeit die Speicherbelegung mit "top" zu erfahren (abgesehen von OS X GUI Tools).
Wäre zum Beispiel eine Idee zu gucken, wie das in top gelöst ist...

Verfasst: Donnerstag 26. März 2009, 23:33
von Leonidas
Darii hat geschrieben:Wäre zum Beispiel eine Idee zu gucken, wie das in top gelöst ist...
``top`` ist AFAIR platformspezifisch und kein Programm das man auf verschiedene Platformen (also quasi Backends) portiert hat. Linux nutzt procps aber das scheint auch tatsächlich nur dort zu funktionieren.

Verfasst: Freitag 27. März 2009, 09:23
von Darii
Proc ist ja auch OS-Spezifisch und auch nicht Teil es POSIX-Standards(sonst würde OSX es unterstützen). Aber das top platformspezifisch ist sollte eigentlich kein Problem darstellen, dann muss man halt nur an verschiedenen Stellen suchen...

Verfasst: Freitag 27. März 2009, 09:28
von Leonidas
Ja, in verschiedenen ``top``s: Linux top, Solaris top, BSD top.. da fände ich es wenn dann sinnvoller ``htop`` zu untersuchen.

Verfasst: Freitag 27. März 2009, 14:15
von HWK
@CM: Dein Snippet scheint zumindest unter Windows XP zu funktionieren. Es liefert bei meinem Rechner mit 1 GB 1022 MB.
MfG
HWK

Verfasst: Samstag 28. März 2009, 08:48
von jens
Unter Vista x64 liefert es nicht wirklich den richtigen Wert. Hab 8GB im system, laut sysinternals process explorer sind ca. 5,8GB frei, das Skript liefert 4095 (nehme an, MB).

Verfasst: Samstag 28. März 2009, 13:44
von JoaoRodrigues
Hello all :) After seeing so many visit from the blog coming from here I thought I'd better have a look and maybe learn something. Though, German seems harder to understand than Dutch :D

The script I wrote works well under my Linux machine and under Windows XP. For others, I honestly don't know because I never had the chance nor the need to try it.

I've been also pointed out to the fact that using the contents of /proc/meminfo might be better. But, since this works for what I need, I'll keep using it :)

Also, for checking for Vista, since it returns 'nt' as well, it would probably work better if you just go with the platform module (and its release method).

Finally, maybe the API I'm using only works for XP and that's why in Vista it works below expectations!

Cheers all!

Verfasst: Montag 30. März 2009, 12:59
von CM
Hi,

Thanks for all these replies. And thanks João for you comment.

lunar, as the linked snipped shows the usage of 'free' I sticked with it, although I'm using subprocess.
That would be:

Code: Alles auswählen

totalmemory = subprocess.Popen(["free -m"], stdout=subprocess.PIPE, 
                                            stderr=subprocess.PIPE, 
                                            shell=True).communicate()[0].split()[7]
João, you might want to go with subprocess as well and inherit new style classes from 'object', too. As for permissions: May I use your snippet within my code? Of course, I would show the source like that: merit where merit is due!.

As soon as I get a solution for Vista, I'll include that, but so far Windows users aren't in my strongest focus anyway.

Cheers,
Christian

edit:
PS Ik ben het er niet mee eens, dat het lezen van een tekst in het Duits tekst veel moeilijker is, dan van een in het Nederlands - het hangt er gewoon van jouw talenkennis af, hoor ;-).

Verfasst: Montag 30. März 2009, 13:04
von Leonidas
The shell-call is unneccessary.

Code: Alles auswählen

totalmemory = subprocess.Popen(["free', '-m"], stdout=subprocess.PIPE,
                                            stderr=subprocess.PIPE).communicate()[0].split()[7]

Verfasst: Montag 30. März 2009, 13:10
von CM
Thanks, but this gives me a traceback:

Code: Alles auswählen

  File "test.py", line 4, in <module>
    stderr=subprocess.PIPE).communicate()[0].split()[7]
  File "/usr/lib/python2.5/subprocess.py", line 594, in __init__
    errread, errwrite)
  File "/usr/lib/python2.5/subprocess.py", line 1153, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory

Verfasst: Montag 30. März 2009, 13:11
von CM
Arrgh, ok, Du meintest:

Code: Alles auswählen

totalmemory = subprocess.Popen(['free', '-m'], stdout=subprocess.PIPE,
                                            stderr=subprocess.PIPE).communicate()[0].split()[7]
Zu beachten sind die Anführungsstriche.

Verfasst: Montag 30. März 2009, 13:20
von Leonidas
Yes, sorry, I didn't test it myself (therefore also the rather strange indentation).

Verfasst: Montag 30. März 2009, 13:30
von CM
Leonidas hat geschrieben:... (therefore also the rather strange indentation).
The perils of copy & paste ...
Anyway, thanks - I will do a final cleanup, if I get João's permission - or rework the snippet anyway.

Christian