2012-05-02 63 views
7

我正在閱讀的這本書在python3中顯示我sys.platform,在windows上運行良好,但在Linux中,即使我的內核是Linux3,我仍然收回「Linux2」。Python sys.platform = Linux2但不是Linux3?

在StackOverflow上執行搜索我已經看到有人提到platform.systemos.name。其中的第一個將告訴你Linux/Windows,但不是什麼版本,後者給你的技術名稱,如在NT/POSIX。

我有點困惑,哪個是經驗python編碼器使用的最準確和首選的方法。是否有可能獲得「windows7」或Linux3?

非常感謝。 ps。仍然是新的stackoverflow,希望正確格式化我的問題。

+1

剛剛遇到python bug報告,其狀態python3.3通過製作'sys.platform'現在只報告「Linux」而不是「Linux2」或「Linux3」等。 http://bugs.python.org/issue12326 我仍然有興趣知道有經驗的編程者喜歡使用,儘管請。 – Zenettii

+0

出於好奇,你有什麼發行版,你有Linux 3內核? –

+0

Archlinux與內核3.3.4 – Zenettii

回答

14

你不應該依賴這個數字,因爲正如你所指出的那樣,它是不一致的。它實際上顯示了編譯Python的系統上內核的主要版本。

此外,已經在Python 3.3去除:

issue 12326:在Linux上,sys.platform不包含主要版本了。現在它總是'linux',而不是'linux2'或'linux3',具體取決於用於構建Python的Linux版本。如果您不需要支持較早的Python版本,請將sys.platform == 'linux2'替換爲sys.platform.startswith('linux'),或直接替換sys.platform == 'linux'
- What's New In Python 3.3 » Porting Python code

參見:sys.platform

所以首選的方式,以找出是否該系統是Linux是sys.platform.startswith('linux')。它適用於所有版本的Python和Linux。

似乎沒有辦法在標準庫中更準確地找到操作系統名稱。

+1

確實。內核的主要版本號是不相關的,從來不應該放在sys.platform中。 'platform.uname()'包含特定的版本,如果你需要的話。 – gps

0

檢查這裏的文件,它既可以解釋爲什麼「將linux2」,以及如何對待它的向後兼容方式:

https://docs.python.org/2/library/sys.html

改變在2.7.3版本:由於大量的代碼檢查sys.platform == 'linux2',並且在Linux 2.x和3.x之間沒有本質的變化, sys.platform始終設置爲'linux2',即使在Linux 3.x上也是如此。在Python 3.3 及更高版本中,該值將始終設置爲'linux',所以建議使用 始終使用startswith ...

相關問題