Na co muszę patrzeć, czy korzystam z systemu Windows, Unix itp.?
python
cross-platform
platform-specific
platform-agnostic
Mark Harrison
źródło
źródło
Odpowiedzi:
Dane wyjściowe
platform.system()
są następujące:Linux
Darwin
Windows
Zobacz:
platform
- Dostęp do danych identyfikujących platformę bazowąźródło
platform
ponadsys.platform
?platform.system()
zwraca"Windows"
zamiast"win32"
.sys.platform
zawiera również"linux2"
na starszych wersjach Pythona, podczas gdy zawiera tylko"linux"
na nowsze.platform.system()
zawsze wrócił właśnie"Linux"
.os.uname()
istnieje tylko dla systemów uniksowych. Dokumenty Python 3: docs.python.org/3/library/os.htmlAvailability: recent flavors of Unix.
Dang - lbrandy pobił mnie na dobre, ale to nie znaczy, że nie mogę dostarczyć ci wyników systemowych dla Visty!
... i nie mogę uwierzyć, że nikt jeszcze nie opublikował takiego dla systemu Windows 10:
źródło
platform.release()
'7'
platform.release()
na moim systemie Windows 10 , a na pewno po prostu dał mi'8'
. Być może zainstalowałem Pythona przed aktualizacją, ale naprawdę?Dla przypomnienia oto wyniki na Macu:
źródło
platform.release()
powraca'19.2.0'
Przykładowy kod do rozróżnienia systemów operacyjnych za pomocą python:
źródło
Możesz również użyć,
sys.platform
jeśli już zaimportowałeśsys
i nie chcesz importować innego modułuźródło
Jeśli chcesz dane czytelne dla użytkownika, ale wciąż szczegółowe, możesz użyć platform.platform ()
Oto kilka różnych możliwych połączeń, które możesz wykonać, aby określić, gdzie jesteś
Dane wyjściowe tego skryptu działały na kilku różnych systemach (Linux, Windows, Solaris, MacOS), a architektury (x86, x64, Itanium, power pc, sparc) są dostępne tutaj: https://github.com/hpcugent/easybuild/ wiki / nazwa_smaku_wersji_ OS
Na przykład serwer Ubuntu 12.04 zapewnia:
źródło
DeprecationWarning: dist() and linux_distribution() functions are deprecated in Python 3.5
Krótka historia
Zastosowanie
platform.system()
. ZwracaWindows
,Linux
lubDarwin
(dla OSX).Długa historia
Istnieją 3 sposoby uzyskania systemu operacyjnego w Pythonie, każdy z własnymi zaletami i wadami:
Metoda 1
Jak to działa ( źródło ): Wewnętrznie wywołuje interfejsy API systemu operacyjnego, aby uzyskać nazwę systemu operacyjnego zdefiniowaną przez system operacyjny. Zobacz tutaj różne wartości specyficzne dla systemu operacyjnego.
Pro: Bez magii, niski poziom.
Con: Zależnie od wersji systemu operacyjnego, więc najlepiej nie używać bezpośrednio.
Metoda 2
Jak to działa (źródło ): Wewnętrznie sprawdza, czy python ma moduły specyficzne dla systemu operacyjnego o nazwie posix lub nt.
Pro: Łatwo sprawdzić, czy system operacyjny POSIX
Przeciw: brak rozróżnienia między Linuksem a OSX.
Metoda 3
Jak to działa ( źródło ): Wewnętrznie w końcu wywoła wewnętrzne interfejsy API systemu operacyjnego, uzyska nazwę specyficzną dla wersji systemu operacyjnego, taką jak „win32” lub „win16” lub „linux1”, a następnie znormalizuje się do bardziej ogólnych nazw, takich jak „Windows” lub „Linux” lub „Darwin” poprzez zastosowanie kilku heurystyk.
Pro: najlepszy przenośny sposób dla systemów Windows, OSX i Linux.
Przeciw: Ludzie Pythona muszą aktualizować heurystycznie normalizację.
Podsumowanie
platform.system()
.posix
ant
następnie użyjos.name
.sys.platform
.źródło
Co powiesz na nową odpowiedź:
To byłby wynik, gdybym używał MACOS
źródło
Zacząłem nieco bardziej systematyczną listę wartości, których możesz oczekiwać przy użyciu różnych modułów (możesz edytować i dodawać swój system):
Linux (64-bitowy) + WSL
sys.platform
jest sufiks wersji jądra, np.linux2
wszystko inne pozostaje identyczneplatform.architecture() = ('64bit', 'ELF')
WINDOWS (64-bitowy)
(z kolumną 32-bitową działającą w podsystemie 32-bitowym)
Kilka uwag:
distutils.util.get_platform()
identyczny z `sysconfig.get_platformAby porównać ze swoim systemem, po prostu uruchom ten skrypt (i dołącz wyniki tutaj, jeśli brakuje :)
źródło
Korzystam z narzędzia WLST, które jest dostarczane z weblogic i nie implementuje pakietu platformy.
Oprócz łatania systemu javaos.py ( problem z os.system () w systemie Windows 2003 za pomocą jdk1.5 ) (czego nie mogę zrobić, muszę używać weblogic od razu po wyjęciu z pudełka), to jest to, czego używam:
źródło
/usr/bin/python3.2
źródło
Dla Jython jedynym sposobem, aby uzyskać nazwę os znalazłem jest sprawdzenie
os.name
właściwości Java (wypróbowanesys
,os
aplatform
moduły dla Jython 2.5.3 na WinXP):źródło
Ciekawe wyniki w systemie Windows 8:
Edycja: To błąd
źródło
Uważaj, jeśli korzystasz z systemu Windows z Cygwin, gdzie
os.name
jestposix
.źródło
W tej samej żyle....
źródło
Jeśli nie szukasz wersji jądra itp., Ale szukasz dystrybucji linuksa, możesz skorzystać z poniższych
w python2.6 +
w python2.4
Oczywiście będzie to działać tylko wtedy, gdy używasz tego na Linuksie. Jeśli chcesz mieć bardziej ogólny skrypt na różnych platformach, możesz połączyć to z przykładowymi kodami podanymi w innych odpowiedziach.
źródło
Spróbuj tego:
i możesz to zrobić:
źródło
os.uname()
jest również dostępny w systemie Windows: docs.python.org/2/library/os.html#os.uname Dostępność: najnowsze smaki Uniksa.Sprawdź dostępne testy z platformą modułów i wydrukuj odpowiedź dla swojego systemu:
źródło
Możesz również użyć tylko modułu platformy bez importowania modułu systemu operacyjnego, aby uzyskać wszystkie informacje.
Przy użyciu tego wiersza można uzyskać ładny i uporządkowany układ do celów sprawozdawczych:
To daje ten wynik:
Zwykle brakuje wersji systemu operacyjnego, ale powinieneś wiedzieć, jeśli korzystasz z systemu Windows, Linux lub Mac, niezależnym sposobem na skorzystanie z tego testu jest:
źródło
Wiem, że to stare pytanie, ale wierzę, że moja odpowiedź może być pomocna dla niektórych osób, które szukają łatwego, łatwego do zrozumienia pytonicznego sposobu wykrywania systemu operacyjnego w kodzie. Testowane na python3.7
źródło
Jeśli używasz MacOS X i
platform.system()
działasz, dostajesz darwin, ponieważ macOS X jest zbudowany na systemie operacyjnym Apple Darwin. Darwin jest jądrem systemu macOS X i zasadniczo jest systemem macOS X bez graficznego interfejsu użytkownika.źródło
To rozwiązanie działa zarówno w przypadku, jak
python
ijython
.moduł os_identify.py :
Użyj w ten sposób:
źródło
Co powiesz na prostą implementację Enum, taką jak poniżej? Nie potrzebujesz zewnętrznych bibliotek!
Po prostu możesz uzyskać dostęp z wartością Enum
PS To jest python3
źródło
Możesz spojrzeć na kod,
pyOSinfo
który jest częścią pakietu pip-date , aby uzyskać najbardziej odpowiednie informacje o systemie operacyjnym, jak widać z twojej dystrybucji Pythona.Jednym z najczęstszych powodów, dla których ludzie chcą sprawdzić swój system operacyjny, jest zgodność terminala i dostępność niektórych poleceń systemowych. Niestety powodzenie tego sprawdzania zależy w pewnym stopniu od instalacji Pythona i systemu operacyjnego. Na przykład
uname
nie jest dostępny w większości pakietów Windows python. Powyższy program python wyświetli dane wyjściowe najczęściej używanych funkcji wbudowanych, już dostarczonych przezos, sys, platform, site
.Zatem najlepszym sposobem na uzyskanie tylko niezbędnego kodu jest spojrzenie na to jako przykład. (Chyba mógłbym go tutaj wkleić, ale nie byłoby to politycznie poprawne).
źródło
Spóźniłem się z grą, ale na wypadek, gdyby ktokolwiek jej potrzebował, jest to funkcja, której używam do wprowadzania poprawek w moim kodzie, aby działał w systemach Windows, Linux i MacO:
źródło