Python und Systeminformationen

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.
Drizzt
User
Beiträge: 22
Registriert: Mittwoch 8. März 2006, 15:47

Grüße liebe Gemeinde,

wie kann man unter Python Systeminformationen, wie RAM, CPU, und insbeseondere MAC Adresse möglichst Plattformunabhängig auslesen ?

gibt es da eine nette Möglichkeit, die ich bisher nicht gefunden hab ?

mfg
Drizzt
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

wie kann man unter Python Systeminformationen, wie RAM, CPU, und insbeseondere MAC Adresse möglichst Plattformunabhängig auslesen ?
Gar nicht. Plattforumunabhängig erst recht nicht. Alles sonst ist in Erweiterungen verpackt, siehe zum Beispiel unter Windows wmi (was mittels pywin32 ansprechbar ist), oder unter Linux das /proc-Dateisystem. Unter anderen Unix-artigen Systemen gibts auch /proc, aber das Format der Dateien und die Informationen unterscheiden sich von System zu System massiv.
--- Heiko.
Drizzt
User
Beiträge: 22
Registriert: Mittwoch 8. März 2006, 15:47

Hi Heiko,

vielen Dank für die Schnelle Antwort, jedoch für mein Anliegen etwas zu overpowered da an die API zu gehen. da ist es einfacher die MAC - Adress abzuschreiben ;)

Gruß
Drizzt
Drizzt
User
Beiträge: 22
Registriert: Mittwoch 8. März 2006, 15:47

Servus nochmal,

ich hab mich doch mal rangewagt, auch wenn es wohl doch nicht zum Einsatz kommt, aber denoch aus Gründen des kennenlernens mit Python:

Ich habe mir mal unter Windows (2k) das pywin32 / win32com Modulpaket installiert (Python 2.4) und finde leider keine Informationen, wie ich an die Hardwareinformationen komme.

Irgendwelche Anregungen eventuell ?

mfg
Drizzt
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Drizzt hat geschrieben:und finde leider keine Informationen, wie ich an die Hardwareinformationen komme. Irgendwelche Anregungen eventuell?
Hi Drizzt!

Vielleicht findest du hier etwas:
http://www.microsoft.com/technet/script ... index.mspx

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hiermit bekommst du auch die MAC-Adressen raus:
http://www.microsoft.com/technet/script ... spy05.mspx

Das habe ich auch noch gefunden. Sieht wirklich nicht schlecht aus. :-)
http://timgolden.me.uk/python/wmi_cookbook.html

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Drizzt
User
Beiträge: 22
Registriert: Mittwoch 8. März 2006, 15:47

Nabend Gerold,

inzwischen hab ich es mit WMI gelöst,

Code: Alles auswählen

import wmi 

c = wmi.WMI()
for interface in c.Win32_NetworkAdapterConfiguration (IPEnabled=1):
  print interface.Description, interface.MACAddress
  for ip_address in interface.IPAddress:
    print ip_address
  print
Nun hadere ich gerade daran, auszulesen etwas über das System, z.B: Prozessor / Ram / physischer Harddisk etc. etwas zu erfahren.

Danke aber für Dein Tip, erweitert natürlich den Horizont "where to look at" ;)

*edit*
http://www.microsoft.com/technet/script ... index.mspx
Das sollte es erschlagen, so hoffe ich, Danke nochmals
*edit*

mfg
Drizzt
Drizzt
User
Beiträge: 22
Registriert: Mittwoch 8. März 2006, 15:47

Nun doch noch eine Anmerkung / Frage. Da ich noch nicht so grün bin, und den Fehler noch nicht wie gewünscht auf den Ursprung folgen kann :

http://www.microsoft.com/technet/script ... apy04.mspx
(benutztes Beispiel code 1:1 Kopie]

Fehlermeldung

Code: Alles auswählen

Admin Password Status: 

Traceback (most recent call last):
  File "C:/Dokumente und Einstellungen/Administrator/Desktop/py/win32test2.py", line 7, in -toplevel-
    print "Admin Password Status: ", objItem.AdminPasswordStatus
  File "C:\Python24\Lib\site-packages\win32com\client\__init__.py", line 454, in __getattr__
    raise AttributeError, "'%s' object has no attribute '%s'" % (repr(self), attr)
AttributeError: '<win32com.gen_py.Microsoft WMI Scripting V1.1 Library.ISWbemObject instance at 0x25490216>' object has no attribute 'AdminPasswordStatus'
Kann ich mir die Eigenschaften/Attribute anzeigen lassen z.B. in einer for Schleife und (len) Abfrage ?

Code: Alles auswählen

colItems = objSWbemServices.ExecQuery("Select * from Win32_ComputerSystem")
mfg
Drizzt
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Code: Alles auswählen

dir(<objekt>)
geht eigentlich bei allen Python-Objekten, und soweit ich weiß geht es auch bei win32.Dispatch()-Objekten und gibt eine Liste von Namen von Attributen aus (also sowohl Funktionen als auch Datenelemente). Zumindest wäre das was was Du mal ausprobieren könntest.

Sonst gibts ja immer noch die entsprechenden Type-Libraries, die man sich angucken kann.
--- Heiko.
Drizzt
User
Beiträge: 22
Registriert: Mittwoch 8. März 2006, 15:47

Erstmal Danke für den Tip ;)

Was mich aber verwirrt, ist einerseits das Script bei Mickeysoft, welches ja auf Daten aus einem Objekt bzw. Hash zugreift, und nun selbige im Objekt (wie oben schon in der Fehlermeldung zu lesen) garnicht verfügbar sind:

Code: Alles auswählen

import win32com.client
strComputer = "."
objWMIService = win32com.client.Dispatch("WbemScripting.SWbemLocator")
objSWbemServices = objWMIService.ConnectServer(strComputer,"root\cimv2")
colItems = objSWbemServices.ExecQuery("Select * from Win32_ComputerSystem")
print dir(colItems)
(Mal die Ausgabe von der MS Seite weggelassen und dafür das dir() benutzt.

Ausgabe:

Code: Alles auswählen

>>> 
['CLSID', 'Item', '_ApplyTypes_', '_NewEnum', '__call__', '__cmp__', '__doc__', '__getattr__', '__getitem__', '__init__', '__int__', '__iter__', '__len__', '__module__', '__nonzero__', '__repr__', '__setattr__', '__str__', '__unicode__', '_get_good_object_', '_get_good_single_object_', '_oleobj_', '_prop_map_get_', '_prop_map_put_', 'coclass_clsid']
Noch eine Idee, wie ich meiner gewünschten Information näher komme, oder habe ich einfach einen Denkfehler ?

mfg
Drizzt
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Nö, kein Denkfehler. Das bedeutet im Endeffekt dass die Methoden und Argumente die das Objekt zur Verfügung stellt nicht "vordefiniert" sind (was bedeuten würde dass sie in der Ausgabe von dir() auftauchen), sondern dynamisch mittels __getattr__ zur Verfügung gestellt werden (was ja auch in der entsprechenden Ausgabe auftaucht).

Ich hatte mal gelesen, dass pywin32 die entsprechenden Objekte aus den Type-Libraries ausliest (sprich den kompilierten IDL-Files) und halt eben als Attribute auf dem Dispatcher-Objekt für die entsprechende Klasse setzt so dass sie als reale Einträge im Namensraum des Objekts auftauchen (die dir() dann anzeigt), aber dem ist ja anscheinend nicht so, oder für das was Du da unten benutzt hast existiert keine Type-Library die pywin32 zum Erstellen des Dispatcher-Objekts benutzt hätte. (Es ist sicherlich irgendwo auf Deinem System eine Type-Library für die WMI-Komponente die Du da benutzt; mußt Dich mal auf die Suche begeben und dann das ganze mit einem Browser für Type-Libraries angucken, der Dir mehr oder weniger den IDL-Code zeigt, der das bereitgestellte Interface eben auch definiert und Dir vor allen Dingen die Attribute und Methodensignaturen zeigt)

Aber, da ich kein Win32-Programmierer bin, kann ich mich auch kollosal irren (zumindest glauben tu ich das nicht, sonst hätte ich nicht geantwortet, aber jemand belehre mich eines besseren). ;-)
--- Heiko.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Was mir da spontan einfällt... (nee kein Link ;) )

Man könnte doch eigentlich ein Modul schreiben, was einige Hardware-Informationen unter Windows und Linux preisgibt. Also eine Einheitliche Schnittstelle, die unter Windows halt über win32com geht und unter Linux das proc Verzeichnis...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Mad-Marty
User
Beiträge: 317
Registriert: Mittwoch 18. Januar 2006, 19:46

sowas hab ich schonmal im groben gemacht

aber nur für die sachen die ich gebraucht habe.

problem ist das du unter windows die win32all installiert haben musst.
ausserdem kriegst du nicht alles darüber, für cpu spezifische sachen gehts am besten mit asm imo - blos geht das afaik nicht in python

Warum ist win32 noch nicht im Python Core, grummel, gibt ja schlieslich auch eine *NIX only sektion ....
Drizzt
User
Beiträge: 22
Registriert: Mittwoch 8. März 2006, 15:47

Vielleicht könntest du es freundlicherweise publizieren oder posten um uns einen Einblick zu gewähren.

mfg
Drizzt
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

@Mad-Marty: Das ist doch schonmal ein Anfang! Man müßte das ganze sehr Modular aufbauen und erstmal nur ein paar Grundlegende Infos bereitstellen. Wenn man irgendwas spezielles benötigt, kann man das ja dann einbauen.

z.B. Wollte ich mal wissen, wieviel Platz auf einem Laufwerk/Partition noch frei ist: http://www.python-forum.de/viewtopic.php?t=842

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Drizzt
User
Beiträge: 22
Registriert: Mittwoch 8. März 2006, 15:47

Ich hab auch mal ein wenig gesucht im Netz, aber entweder die falschen Schlagworte benutzt, oder es gibt tatsächlich nichts in der Richtung, was die Arbeit vereinfacht, bzw. modular bereitstellt :(

Gruß
Drizzt
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Ich behaupte mal es gibt in die Richtung, vor allen Dingen systemübergreifend, so gut wie nix. Ich kenne eigentlich für keine Programmiersprache so eine Bibliothek (also zumindest in Java, C und auch Perl nicht). Wenn Du für Python was schreibst, dann veröffentliche es doch; ich würde auch einen Teil den ich jetzt schon für Linux (spezifisch dafür, auf BSDs tut der Code nicht, müsste aber nur geringfügig angepasst werden) geschrieben habe beisteuern, ich muß nur mal abklären wie das mit Lizenzen drauf aussieht, dann kann ich den Code mal posten.
--- Heiko.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

modelnine hat geschrieben:Ich behaupte mal es gibt in die Richtung, vor allen Dingen systemübergreifend, so gut wie nix. Ich kenne eigentlich für keine Programmiersprache so eine Bibliothek (also zumindest in Java, C und auch Perl nicht).
Das ist irgendwie schade... Ich meine es wäre doch mit vertretbaren mitteln möglich gewisse Kenngrößen, die es auf allen Plattformen gibt, auslesen zu lassen und dafür Plattformübergreifende Methoden zu verfügung zu stellen...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Drizzt
User
Beiträge: 22
Registriert: Mittwoch 8. März 2006, 15:47

modelnine hat geschrieben:Wenn Du für Python was schreibst, dann veröffentliche es doch;
Genau da liegt der Hund begraben, ich hatte gehofft sowas modular schon vorzufinden, denn ich fang grad an erste Schritte mit Python zu machen. Habe noch ganz rudimentäre Probleme wie Doku zum passenden Problem in annehmbarer Zeit zu finden, wie bei perl ein einfaches z.B. für Datenbanken : man DBD::mySQL oder ähnlich. Hinzukommt, daß ich mich mit den API Calls nicht wirklich auskenne, und beide Probleme zugleich als Quereinsteiger sind noch etwas waghalsig um das zeitnah zu schaffen um ein recht kleines Problem, mit kleinst möglichen Mitteln zu realisieren.

Da ich in einer Schule aushelfe und in Schulen bekanntlichermaßen die Mittel knapp sind, und Python auf allen Rechnern installiert ist wegen ihrer Informatikkurse, wollte ich diese Möglichkeit nutzen. (Überwiegend Windows [aber halt auch Suse Installationen] wobei die Windows Rechner einen Großteil abdecken würden.)

Früher oder später gelange ich vielleicht auch mittels einem Tip oder Beispiel in die Verlegenheit es modular bereitstellen zu können, und in Python genug Fundament dafür zu besitzen.

mfg
Drizzt
Clython
User
Beiträge: 151
Registriert: Samstag 21. August 2004, 13:58
Wohnort: Schweiz, BE-2500

Drizzt hat geschrieben:Habe noch ganz rudimentäre Probleme wie Doku zum passenden Problem in annehmbarer Zeit zu finden, wie bei perl ein einfaches z.B. für Datenbanken : man DBD::mySQL oder ähnlich.
Versuch mal folgendes auf der Eingabeaufforderung:

pydoc -g #Gibt dir ein kleines Hilfs-Gui aus

oder

pydoc -p PORTNUMMER (Nim etwas das grösser als 1024 ist)

Du kannst die Doku dann in deinem Browser mit http://localhost:PORTNUMMER anschauen

Die Doku enthält die Domkumentation zu allen Built-ins und Modulen, die du installiert hast
Antworten