我正在研究幾個Linux工具,並且需要防止在Windows上安裝,因爲它依賴於FHS,因此在該平臺上無用。 platform.platform
函數接近,但只返回一個字符串。在Python中可靠地檢測Windows
不幸的是,我不知道該字符串中搜索的內容是否可以產生可靠的結果。有沒有人知道要搜索什麼或有人知道我在這裏失蹤的另一個功能?
我正在研究幾個Linux工具,並且需要防止在Windows上安裝,因爲它依賴於FHS,因此在該平臺上無用。 platform.platform
函數接近,但只返回一個字符串。在Python中可靠地檢測Windows
不幸的是,我不知道該字符串中搜索的內容是否可以產生可靠的結果。有沒有人知道要搜索什麼或有人知道我在這裏失蹤的另一個功能?
>>> import platform
>>> platform.system()
'Windows'
試試這個:
import platform
if platform.system() == "Darwin":
# Don't have Windows handy, but I'd expect "Win32" or "Windows" for it
編輯:剛剛看到你的努力platform.platform()
... platform.system()
將更好地爲這種情況。相信我,使用它。黑暗的角落在平臺檢測。
distutils
也會這樣做,如果你問得好。
在Windows文件上,你總是可以做一些不如os.path.exists()
的...但是platform
和Python標準庫一樣可靠。
編輯2:另一個有用的回答指出platform.system()
是完全等於他的Windows機器上的「Windows」。
在我的Windows機器上,platform.system()
返回'Windows'
。
但是,我不知道爲什麼你會打擾。如果你想限制它在技術上運行的平臺,我會使用白名單而不是黑名單。
其實,我也不會做技術,因爲在所有的Python可能的下一個版本可能有Win32/Win64
而不是Windows
(黑色上市)和*nix
代替Linux
(白上市)。
我的建議是簡單說明需求是什麼,如果用戶選擇忽略它,那就是他們的問題。如果他們說他們收到了一條錯誤消息,指出「無法找到FHS」,並且他們承認他們正在Windows上運行,則輕輕地向他們指出這不是受支持的配置。
也許你的客戶很聰明,讓FHS在Windows下運行,這樣你的代碼就可以工作。他們不太可能欣賞他們認爲對軟件的任意限制。
這是軟件開發人員每天都面臨的問題。即使是龐大的組織也無法支持每個單一平臺和配置。
+1,很好的答案,我同意。檢測到FHS不可用是一種比檢測操作系統和做出假設更好的方法,並且它更安全(畢竟,有人在你的平臺上限制破解將會失敗*!)。 – 2009-09-07 01:56:33
+1,是的白名單是最好的,因爲角落案件是討厭的。在Windows下運行Cygwin,我得到'platform.system()'返回'CYGWIN_NT-5.2-WOW64'。那不會是我的第一個猜測! – 2009-09-07 10:07:43
從幫助(平臺)
system()
Returns the system/OS name, e.g. 'Linux', 'Windows' or 'Java'.
An empty string is returned if the value cannot be determined.
>>> import os
>>> os.name
'nt'
「進口依賴操作系統模塊的名稱下列名稱當前已註冊的: 'POSIX', 'NT',「 mac','os2','ce','java','riscos'。「(三)http://docs.python.org/library/os.html#os.name
import os
if os.name == 'nt':
#yourcodehere
至少在我的機器上''os.name'在Cygwin下運行時返回'posix',在本地窗口下運行時'nt'構建 – sbk 2011-10-03 16:04:26
是的,Cygwin是一種痛苦,但對於原始故事這種行爲被接受(如果不需要)。 – 2012-11-22 12:02:24
對於那些來到這裏尋找一種方式,從Python的(而不是僅僅檢測Windows)中檢測到Cygwin的,這裏有來自os.name
和platform.system
一些示例返回值在不同的平臺
OS/build | os.name | platform.system()
-------------+---------+-----------------------
Win32 native | nt | Windows
Win32 cygwin | posix | CYGWIN_NT-5.1*
Win64 native | nt | Windows
Win64 cygwin | posix | CYGWIN_NT-6.1-WOW64*
Linux | posix | Linux
從這一點來說,如何在Windows本地和Cygwin區分應該是顯而易見的,雖然我不相信這是面向未來的。
*版本號是XP和Win7 respecti真的,不要依賴他們
我的Cygwin顯示「Windows」。 – 2012-06-01 22:10:29
@JaceBrowning:足夠公平的,我們可能使用不同版本的Cygwin或Python ...這是「not-futureproof」筆記出現的地方:) – sbk 2012-06-04 13:28:55
區別在於我的Python安裝可能是Windows的一部分,而不是Cygwin的? – 2012-06-04 17:49:19
我也沒有Windows方便,但這個函數返回我的電腦上的'Linux'。這些文檔似乎提到了'Windows',所以我想我會繼續這樣做,並希望它涵蓋所有情況。 – blokkie 2009-09-07 01:34:36
它應該。見Pax的答案。 – 2009-09-07 01:35:45
啊,你的編輯清除了它。多謝。 – blokkie 2009-09-07 01:50:18