verfügbaren RAM ermitteln

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

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
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Wie wärs unter linux mit open('/proc/meminfo')? Keine Ahnung, was Windows hier angeht.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

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
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

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.
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

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).
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

kbr hat geschrieben:... Mac OS X geht das so nicht.
Oh ja, ich erinnere mich - OSX ist da etwas anders. Danke.
lunar

Was ist mit "free"? Dessen Ausgabe dürfte leichter zu parsen sein ..
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

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...
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

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...
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ja, in verschiedenen ``top``s: Linux top, Solaris top, BSD top.. da fände ich es wenn dann sinnvoller ``htop`` zu untersuchen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

@CM: Dein Snippet scheint zumindest unter Windows XP zu funktionieren. Es liefert bei meinem Rechner mit 1 GB 1022 MB.
MfG
HWK
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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).

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
JoaoRodrigues
User
Beiträge: 2
Registriert: Samstag 28. März 2009, 13:37
Kontaktdaten:

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!
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

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 ;-).
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

The shell-call is unneccessary.

Code: Alles auswählen

totalmemory = subprocess.Popen(["free', '-m"], stdout=subprocess.PIPE,
                                            stderr=subprocess.PIPE).communicate()[0].split()[7]
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

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
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

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.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Yes, sorry, I didn't test it myself (therefore also the rather strange indentation).
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

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
Antworten