2009-11-22 13 views
19

Meine Anwendung wird vermutlich auf einem Mac OS X-System ausgeführt. Was ich jedoch tun muss, ist herauszufinden, auf welcher Version von Mac OS (oder Darwin) es läuft, vorzugsweise als Nummer. Zum BeispielWie erkennt man die Mac OS Version mit Python?

  • "10.4.11" zurückkehren würde entweder 10,4 oder 8
  • "10.5.4" zurückkehren würde 10.5 oder 9
  • "10.6" zurückkehren würde 10,6 oder 10

ich fand heraus, dass Sie dies tun könnten, was „8.11.0“ auf meinem System zurückzugibt:

import os 
os.system("uname -r") 

gibt es einen sauberen Weg, dies zu tun, oder zumindest eine Möglichkeit, das ziehen erste Nummer aus dem Ergebnis? Vielen Dank!

Antwort

38
>>> import platform 
>>> platform.mac_ver() 
('10.5.8', ('', '', ''), 'i386') 

Wie Sie sehen, ist das erste Element des Tupels mac_ver kehrt ein String ist, keine Zahl (schwer zu '10 .5.8' machen in eine Reihe -!), Aber es ist ziemlich einfach, die 10.x.y zu manipulieren string in die Art von Zahlen, die Sie wollen. Zum Beispiel

>>> v, _, _ = platform.mac_ver() 
>>> v = float('.'.join(v.split('.')[:2])) 
>>> print v 
10.5 

Wenn Sie lieber die Darwin Kernel-Version und nicht die MacOSX-Version, das ist auch leicht zu erreichen - mit dem ähnlich formatierte Zeichenfolge, das das dritte Element des Tupels von platform.uname() zurückgekehrt ist.

+0

+1 für 'platform' –

+0

Das ist perfekt! Danke für Ihre Hilfe! –

+0

Leider funktioniert dies auf Debian (und wahrscheinlich auch auf anderen Linux) und gibt falsche positive Ergebnisse, wenn Sie diese Funktion verwenden, um zu überprüfen, ob das System Mac OS X –

0

Wenn Sie einen Befehl ausführen möchten - wie 'uname' - und die Ergebnisse als Zeichenfolge erhalten, verwenden Sie die subprocess module.

import subprocess 
output = subprocess.Popen(["uname", "-r"], stdout=subprocess.PIPE).communicate()[0] 
1

Sie könnten die Ausgabe des Befehls/usr/bin/sw_vers analysieren.

+0

Der Befehl uname gibt ihm die Version - sein Problem ist, wie zu bekommen dieser Wert in eine Variable. –

+0

Nun, zumindest gibt es die Kernel-Version - aber er scheint ein Gesamtproblem zu haben, Befehlsausgabe in eine Variable lesen zu können. –

2

Wenn Sie bereits os verwenden, können Sie os.uname()

import os 
os.uname() 
1

platform.mac_ver() verwenden, wird ein Tupel zurückgeben (Release, version, Maschine

mac So erhalten Version von Code

>>> platform.mac_ver()[0] 

'10.8.4' 

diese Methode ist einfach

Verwandte Themen