Як перевірити операційну систему в Python?


148

Я хочу перевірити операційну систему (на комп’ютері, де працює сценарій).

Я знаю, що можу використовувати os.system('uname -o')в Linux, але це дає мені повідомлення в консолі, і я хочу написати в змінну.

Буде добре, якщо сценарій може сказати, чи це Mac, Windows чи Linux. Як я можу це перевірити?



1
Можливий дублікат Python: На якій ОС я працюю?
— TylerH

Відповіді:


287

Ви можете використовувати sys.platform:

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

sys.platformмає більш дрібну зернистість, ніж sys.name.

Дійсні значення можна отримати в документації .

Дивіться також відповідь на "На якій ОС я працюю?"


8
Зауважте, що в cygwin він повертається "cygwin"не так, "win32"як хтось може очікувати.
— Michał Bentkowski

21
Дякую. Яка різниця між linux та linux2?
— Tharindu Rusira

1
Яким буде вихід для BSD?
— галуа

1
Зауважте, що оскільки Python 3.3 "linux2"вже не є можливим значенням platform(див. Пов’язані документи для підтвердження), тому, якщо вам потрібно лише підтримувати Python 3.3 та пізніші версії, ви можете спокійно видалити пункт `або platform ==" linux2 "` перша умова.
— Марк Амері

23

Якщо ви хочете дізнатися, на якій платформі ви перебуваєте з "Linux", "Windows" або "Darwin" (Mac), без більшої точності вам слід використовувати:

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

platform.systemФункція використовує unameвнутрішньо.


1
Мені подобається це рішення , але я хочу відзначити, що з документації йдеться , що він повернеться Linux, Windows, Javaабо порожній рядок. devdocs.io/python~3.7/library/platform#platform.system
— Брендон Бенефілд

2
@BrandonBenefield, перерахунок є прикладом можливих значень. На пристроях Apple він повертає "Darwin".
— Лоран ЛАПОРТ

15

Ви можете отримати досить грубе уявлення про ОС, яку ви використовуєте, перевіривши sys.platform.

Отримавши цю інформацію, ви можете використовувати її, щоб визначити, чи os.uname()доцільно викликати щось подібне , щоб зібрати більш конкретну інформацію. Ви також можете використовувати щось на зразок системної інформації Python на unix-подібних ОС або pywin32 для Windows.

Також є psutil, якщо ви хочете зробити більш глибокий огляд, не бажаючи піклуватися про ОС.


6

Більш детальна інформація доступна в platformмодулі .


Чи має platformмодуль якусь перевагу перед sys.platform? Коли я хотів би скористатися яким підходом?
— матч

@matth: Ви отримуєте більш детальну структуровану інформацію з platformмодуля. Просто натисніть посилання для документації.
— Свен Марнах

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.