2009-01-21 26 views
24

Wie können mit Python Informationen wie CPU-Auslastung, Speicherauslastung (frei, verwendet usw.), Prozessanzahl usw. generisch zurückgegeben werden, so dass der gleiche Code unter Linux, Windows, BSD usw. ausgeführt werden kann?Wie kann ich Systeminformationen in Python zurückgeben?

Oder wie könnten diese Informationen auf allen oben genannten Systemen zurückgegeben werden, wobei der für dieses Betriebssystem spezifische Code nur dann ausgeführt wird, wenn dieses Betriebssystem tatsächlich die Betriebsumgebung ist?

+2

pip install psutil – meawoppl

Antwort

17

In Bezug auf plattformübergreifende: Ihre beste Wette ist wahrscheinlich plattformspezifischen Code zu schreiben, und dann importieren Sie es bedingt. z.B.

import sys 
if sys.platform == 'win32': 
    import win32_sysinfo as sysinfo 
elif sys.platform == 'darwin': 
    import mac_sysinfo as sysinfo 
elif 'linux' in sys.platform: 
    import linux_sysinfo as sysinfo 
#etc 

print 'Memory available:', sysinfo.memory_available() 

Für bestimmte Ressourcen, wie Anthony Sie können /proc unter Linux zugreifen weist darauf hin. Unter Windows können Sie bei Microsoft Script Repository herumstöbern. Ich bin mir nicht sicher, wo diese Art von Informationen auf Macs zu bekommen, aber ich kann eine große Website denken, wo du bist :-)

+5

+1: Jedes Betriebssystem * ist * anders. Einige Konzepte werden nicht zugeordnet. Es kann nicht OS-agnostisch gemacht werden. Es muss mit einer eindeutigen Implementierung für jedes Betriebssystem polymorph sein. –

+1

Ich stimme zu, das ist wahrscheinlich der beste Weg. Ich habe 2 neue Fragen für OS X/Windows-Besonderheiten erstellt. http://stackoverflow.com/questions/467600/how-can-i-read-system-information-in-python-on-os-x und http://stackoverflow.com/questions/467602/how-can- Ich-lese-System-Informationen-in-Python-on-Windows – DavidM

1

Es ist wie Sie viel mehr Informationen als die Standard-Python-Bibliothek bietet bekommen aussieht. Wenn ich Sie wäre, würde ich den Quellcode für 'ps' oder 'top' herunterladen, oder die Gnome/KDE-Version derselben, oder eine beliebige Anzahl von Systemüberwachungs-/Graphikprogrammen, bei denen die Wahrscheinlichkeit größer ist, dass alle notwendigen Unix-Kreuzungen vorhanden sind Plattform-Bits, sehen, was sie tun, und dann die notwendigen nativen Aufrufe mit Ctypes machen.

Es ist trivial, die Plattform zu erkennen. Zum Beispiel mit Ctypes könnten Sie versuchen, libc.so zu laden, wenn dies eine Ausnahme auslöst, versuchen Sie 'msvcrt.dll' und so weiter zu laden. Nicht zu vergessen, einfach den Namen des Betriebssystems mit os.name zu überprüfen. Dann delegieren Sie die Aufrufe an Ihre neue plattformübergreifende API an die entsprechende plattformspezifische (Entschuldigung) Implementierung.

Wenn Sie fertig sind, vergessen Sie nicht, das resultierende Paket auf pypi hochzuladen.

5

In einer Linux-Umgebung könnten Sie vom/proc-Dateisystem lesen.

~$ cat /proc/meminfo 
MemTotal:  2076816 kB 
MemFree:  130284 kB 
Buffers:  192664 kB 
Cached:  1482760 kB 
SwapCached:   0 kB 
Active:   206584 kB 
Inactive:  1528608 kB 
HighTotal:  1179484 kB 
HighFree:  120768 kB 
LowTotal:  897332 kB 
LowFree:   9516 kB 
SwapTotal:  2650684 kB 
SwapFree:  2650632 kB 
Dirty:    64 kB 
Writeback:   12 kB 
AnonPages:  59668 kB 
Mapped:   22008 kB 
Slab:   200744 kB 
PageTables:  1220 kB 
NFS_Unstable:  0 kB 
Bounce:    0 kB 
CommitLimit: 3689092 kB 
Committed_AS: 263892 kB 
VmallocTotal: 114680 kB 
VmallocUsed:  3604 kB 
VmallocChunk: 110752 kB 
0

Es gibt die PSI (Python Systeminformationen) Projekt mit dem Ziel, aber sie tun nicht bedecken Windows noch.

Sie können wahrscheinlich PSI verwenden und requies like this one und erstellen Sie eine grundlegende Bibliothek, die Ihren Anforderungen entspricht.

2

psutil fragen könnten, sollten, was Sie brauchen:

[.. .] plattformübergreifende Bibliothek zum Abrufen von Informationen über laufende Prozesse und Systemauslastung (CPU, Speicher, Festplatten, Netzwerk) [...]

[...] unterstützt Linux, Windows, OSX, FreeBSD und Sun Solaris, 32-Bit- und 64-Bit-Architekturen [...]

Verwandte Themen