2009-11-22 31 views
19

Se supone que mi aplicación se ejecuta en un sistema Mac OS X. Sin embargo, lo que tengo que hacer es averiguar en qué versión de Mac OS (o Darwin) se está ejecutando, preferiblemente como un número. Por ejemplo,¿Cómo detectar la versión de Mac OS usando Python?

  • "10.4.11" volvería ya sea 10.4 o 8
  • "10.5.4" devolvería 10.5 o 9
  • "10,6" volvería 10,6 o 10

descubrí que se podía hacer esto, que devuelve "8.11.0" en mi sistema:

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

¿hay una forma más limpia de hacer esto, o al menos una forma de tirar de la primer número del resultado? ¡Gracias!

Respuesta

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

Como se ve, el primer elemento de la tupla mac_ver retornos es una cadena, no un número (difícil de hacer '10 .5.8' en un número -!), Pero es bastante fácil de manipular la 10.x.y ingrese el tipo de números que desea. Por ejemplo,

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

Si prefiere la versión del kernel Darwin en lugar de la versión MacOSX, que también es de fácil acceso - utilizar la cadena con formato similar-que es el tercer elemento de la tupla devuelta por platform.uname().

+0

1 para 'platform' –

+0

¡Eso es perfecto! ¡Gracias por tu ayuda! –

+0

Desafortunadamente, esto funciona en Debian (y probablemente también en otros Linux), dando falsos positivos si usa esta función para verificar si el sistema es Mac OS X –

0

Si desea ejecutar un comando, como 'uname', y obtener los resultados como una cadena, use el subprocess module.

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

Puede analizar la salida del comando/usr/bin/sw_vers.

+0

El comando uname le dará la versión - su problema está en cómo obtener este valor en una variable. –

+0

Bueno, al menos da la versión del kernel, pero parece tener un problema general de poder leer el resultado del comando en una variable. –

2

Si ya está utilizando OS, es posible que desee utilizar os.uname()

import os 
os.uname() 
1

platform.mac_ver() devolverá una tupla (liberación, versionInfo, máquina

Así que mac versión por código

>>> platform.mac_ver()[0] 

'10.8.4' 

este método es fácil

Cuestiones relacionadas