Jak sprawdzić system operacyjny w Pythonie?

148

Chcę sprawdzić system operacyjny (na komputerze, na którym działa skrypt).

Wiem, że mogę używać os.system('uname -o')w Linuksie, ale wyświetla mi się komunikat w konsoli i chcę pisać do zmiennej.

Będzie dobrze, jeśli skrypt może stwierdzić, czy jest to Mac, Windows czy Linux. Jak mogę to sprawdzić?

kolek
źródło

Odpowiedzi:

287

Możesz użyć sys.platform:

from sys import platform
if platform == "linux" or platform == "linux2":
    # linux
elif platform == "darwin":
    # OS X
elif platform == "win32":
    # Windows...

sys.platformma drobniejszą ziarnistość niż sys.name.

Prawidłowe wartości można znaleźć w dokumentacji .

Zobacz także odpowiedź na pytanie „Na jakim systemie operacyjnym korzystam?”

Wilk
źródło
8
Zauważ, że w cygwin wraca "cygwin"nie "win32"tak, jak ktoś mógłby się spodziewać.
Michał Bentkowski
21
Dzięki. Jaka jest różnica między linuxem a linux2?
Tharindu Rusira,
1
jaki byłby wynik dla BSD?
galois
1
Zauważ, że od Pythona 3.3, "linux2"nie jest już możliwą wartością platform(zobacz powiązane dokumenty w celu potwierdzenia), więc jeśli potrzebujesz tylko obsługi Pythona 3.3 i nowszych, możesz bezpiecznie usunąć klauzulę `lub platform ==" linux2 "` z pierwszy warunek.
Mark Amery
23

Jeśli chcesz wiedzieć, na której platformie jesteś poza „Linux”, „Windows” lub „Darwin” (Mac), bez większej precyzji, użyj:

>>> import platform
>>> platform.system()
'Linux'  # or 'Windows'/'Darwin'

platform.systemWykorzystuje unamewewnętrznie.

Laurent LAPORTE
źródło
1
Lubię to rozwiązanie, ale chcę podkreślić, że od docs stwierdza, że powróci Linux, Windows, Javalub pusty ciąg. devdocs.io/python~3.7/library/platform#platform.system
Brandon Benefield
2
@BrandonBenefield, wyliczenie jest przykładem możliwych wartości. Na urządzeniach Apple zwraca „Darwin”.
Laurent LAPORTE
15

Możesz uzyskać dość zgrubne wyobrażenie o używanym systemie operacyjnym, sprawdzając sys.platform.

Gdy już masz te informacje, możesz ich użyć, aby określić, czy dzwonienie do czegoś takiego os.uname()jest odpowiednie w celu zebrania bardziej szczegółowych informacji. Możesz także użyć czegoś takiego jak Python System Information w systemach operacyjnych typu unix lub pywin32 dla Windows.

Jest też psutil, jeśli chcesz przeprowadzić bardziej dogłębną kontrolę, nie dbając o system operacyjny.

Nick Bastin
źródło
6

Bardziej szczegółowe informacje dostępne są w platformmodule .

Sven Marnach
źródło
Czy platformmoduł ma jakąś przewagę nad sys.platform? Kiedy chciałbym zastosować które podejście?
jutro
@matth: Z modułu uzyskasz bardziej szczegółowe, uporządkowane informacje platform. Wystarczy kliknąć łącze do dokumentacji.
Sven Marnach