Як перевірити операційну систему в 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.