Как проверить операционную систему в 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"как кто-то может ожидать.
Михал Бентковски,
21
Спасибо. В чем разница между Linux и Linux2?
Таринду Русира
1
каким будет выход для BSD?
Галуа
1
Обратите внимание, что, начиная с Python 3.3, "linux2"это больше не является возможным значением platform(см. Связанные документы для подтверждения), и поэтому, если вам нужно только поддерживать Python 3.3 и более поздние версии, вы можете безопасно удалить предложение `or 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 возвращается «Дарвин».
Лоран Лапорт
15

Вы можете получить довольно грубое представление об используемой ОС, проверив sys.platform.

Когда у вас есть эта информация, вы можете использовать ее, чтобы определить, os.uname()подходит ли что-то подобное для сбора более конкретной информации. Вы также можете использовать что-то вроде системной информации Python для Unix-подобных ОС или pywin32 для Windows.

Также есть psutil, если вы хотите провести более тщательный осмотр, не заботясь об ОС.

Ник Бастин
источник
6

Более подробная информация доступна в platformмодуле .

Свен Марнах
источник
Есть ли у platformмодуля какие-либо преимущества перед sys.platform? Когда я хотел бы использовать какой подход?
Матф
@matth: вы получаете более подробную структурированную информацию из platformмодуля. Просто нажмите на ссылку для документации.
Свен Марнах