2009-11-22 10 views
19

Si presume che la mia applicazione sia in esecuzione su un sistema Mac OS X. Tuttavia, quello che devo fare è capire quale versione di Mac OS (o Darwin) è in esecuzione, preferibilmente come un numero. Ad esempio,Come rilevare la versione di Mac OS usando Python?

  • "10.4.11" restituirebbe sia 10.4 o 8
  • "10.5.4" restituirebbe 10.5 o 9
  • "10.6" restituirebbe 10,6 o 10

ho scoperto che si potrebbe fare questo, che restituisce "8.11.0" sul mio sistema:

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

c'è un modo più pulito per fare questo, o almeno un modo per tirare la primo numero dal risultato? Grazie!

risposta

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

Come si vede, il primo elemento della tupla mac_ver rendimenti è una stringa, non un numero (difficile fare '10 .5.8' in un certo numero -!), Ma è abbastanza facile da manipolare il 10.x.y stringa nel tipo di numeri che vuoi. Ad esempio,

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

Se si preferisce la versione del kernel Darwin piuttosto che la versione MacOSX, che è anche di facile accesso - utilizzare la stringa simile formato che è il terzo elemento della tupla restituita da platform.uname().

+0

+1 per 'platform' –

+0

È perfetto! Grazie per l'aiuto! –

+0

Sfortunatamente, questo funziona su Debian (e probabilmente anche su Linux), dando falsi positivi se si usa questa funzione per verificare se il sistema è Mac OS X –

0

Se si desidera eseguire un comando, ad esempio "uname", e ottenere i risultati come stringa, utilizzare subprocess module.

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

È possibile analizzare l'output del comando/usr/bin/sw_vers.

+0

Il comando uname gli darà la versione - il suo problema è in come ottenere questo valore in una variabile. –

+0

Beh, almeno dà la versione del kernel - ma sembra avere un problema generale di essere in grado di leggere l'output del comando in una variabile. –

2

Se si sta già utilizzando OS, si potrebbe desiderare di utilizzare os.uname()

import os 
os.uname() 
1

platform.mac_ver() restituirà una tupla (rilascio, versioninfo, macchina

Così ottenere mac versione per codice

>>> platform.mac_ver()[0] 

'10.8.4' 

questo metodo è facile

Problemi correlati