2009-11-22 23 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' 

此方法易於