2009-11-22 67 views
19

我的应用程序被假定为在Mac OS X系统上运行。不过,我需要做的是找出的Mac OS(或达尔文)的什么版本在运行时,最好为数字。例如,如何使用Python检测Mac OS版本?

  • “10.4.11” 将返回要么10.4或8
  • “10.5.4” 将返回10.5或9
  • “10.6” 将返回10.6或10

我发现,你可以做到这一点,它返回我的系统上“8.11.0”:

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

有一个更清洁的方式来做到这一点,或至少一种方式来拉结果中的第一个数字?谢谢!

回答

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

正如你看到的,元组mac_ver返回的第一个项目是一个字符串,而不是数字(很难做出'10 .5.8' 成一个数字 - !),但它很容易操纵10.x.y字符串转换成你想要的数字。例如,

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

如果你喜欢的Darwin内核版本,而不是Mac OS X版本,这也很容易访问 - 使用同样格式的字符串,这是由platform.uname()返回的元组的第三个项目。

+0

1为'platform' – 2009-11-22 00:54:14

+0

那很完美!谢谢你的帮助! – 2009-11-22 00:56:42

+0

不幸的是,这适用于Debian(也可能是其他的Linux),以及,使误报,如果你使用此功能来检查系统是否为Mac OS X – 2017-06-06 20:54:34

0

如果你想运行一个命令 - 如“UNAME” - 和得到的结果作为一个字符串,使用subprocess module

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

您可以解析/ usr/bin/sw_vers命令的输出。

+0

uname命令会给他的版本 - 他的问题是如何获得这个值变成了一个变量。 – 2009-11-22 00:53:05

+0

嗯,至少它给内核版本 - 但他似乎有能够读取命令输出到一个变量的整体问题。 – 2009-11-22 01:03:39

2

如果您正在使用的操作系统,您可能需要使用os.uname()

import os 
os.uname() 
1

platform.mac_ver()将返回一个元组(发行,VERSIONINFO,机

因此,获得MAC版本由代码

>>> platform.mac_ver()[0] 

'10.8.4' 

此方法易于