我試圖確定如果操作系統是基於Unix從Python腳本。我能想到的兩種方法可以做到這一點,但它們都有缺點:如何確定Python腳本運行的操作系統是否類Unix?
- 檢查
platform.system()
是一個元組,如("Linux", "Darwin")
。問題在於我不想提供每一個類Unix系統的列表,特別是有很多* BSD變種。如果函數os.fchmod
存在 - 檢查,因爲這個功能僅在Unix可用。這似乎不是一個乾淨的或「Pythonic」的方式來做到這一點。
我試圖確定如果操作系統是基於Unix從Python腳本。我能想到的兩種方法可以做到這一點,但它們都有缺點:如何確定Python腳本運行的操作系統是否類Unix?
platform.system()
是一個元組,如("Linux", "Darwin")
。問題在於我不想提供每一個類Unix系統的列表,特別是有很多* BSD變種。如果函數os.fchmod
存在的Python的方式做到這一點是不關心你是在什麼平臺上。
如果有多個不同的設備來完成取決於平臺的東西,那麼他們的抽象的函數或類的後面,它應該嘗試的設施,如果該設施不適用於當前平臺上移動到另一個。
這似乎是一個明智的做法。您如何建議在代碼中實施「嘗試並繼續」過程? 像這樣: '嘗試: something_for_windows() 除外: something_for_unix()'? 如果是的話,將如何實現它,如果你是針對兩種以上不同類型的操作系統(例如:在Windows,Linux和Mac /達爾文)? – user2722730
@ user2722730嘗試/除了是做到這一點的一種方法。如果有問題的API返回錯誤代碼,如果該設施不存在,那麼您將測試它們。如果你有兩個以上,那麼你會繼續嵌套這些控制結構。或者,一旦你知道哪個設施被支持,你可以換掉默認的「嘗試一堆東西」的實施,以調用檢測到的設施。 – cdhowie
我需要導入特定於平臺的Python模塊來執行平臺特定的任務,因此沒有API錯誤代碼。要按照我提到的3個平臺的建議來做到這一點,我需要嘗試一下 - 除了嘗試 - 除外。這看起來像一個醜陋的方式來做到這一點,特別是因爲3是一個奇數,最後除了它裏面沒有代碼,或者我需要手動重新引發任何異常被捕獲的Python腳本退出並打印錯誤。 – user2722730
import sys
if 'win' in sys.platform():
#windows
else:
#not windows
,或者你可以嘗試導入平臺相關的庫
try:
import windows_only as generic
except ImportException:
try:
import unix_only as generic
except ImportException:
import stdlib.module as generic
print generic.common_function()
,然後還有的總是可靠
>>> import os
>>> os.name
nt
請注意,'os.name'可能是OP想要的粒度 - 「」類Unix系統的「posix」,Windows的「nt」'。文檔說'posix','nt','os2','ce','java'和'riscos'正在使用中。 –
[EAFP](http://docs.python.org/ 2/glossary.html) - 只需讓腳本執行所有操作即可。它可能會在Windows上失敗;只要確定它不符合你的要求即可。 –
檢查'os.name =='posix''? – geoffspear
如何檢查它是否不包含「Windows」? – shahkalpesh