Python: На какой ОС я работаю?

Что мне нужно посмотреть, чтобы увидеть, нахожусь ли я на Windows или Unix и т.д.?

Ответ 2

Dang - lbrandy избил меня до удара, но это не значит, что я не могу предоставить вам системные результаты для Vista!

>>> import os
>>> os.name
'nt'
>>> import platform
>>> platform.system()
'Windows'
>>> platform.release()
'Vista'

... и я не могу поверить, что ни один из них не опубликовал один для Windows 10:

>>> import os
>>> os.name
'nt'
>>> import platform
>>> platform.system()
'Windows'
>>> platform.release()
'10'

Ответ 3

Для записи здесь приведены результаты на Mac:

>>> import os
>>> os.name
'posix'
>>> import platform
>>> platform.system()
'Darwin'
>>> platform.release()
'8.11.1'

Ответ 4

Пример кода для дифференциации ОС с помощью python:

from sys import platform as _platform

if _platform == "linux" or _platform == "linux2":
   # linux
elif _platform == "darwin":
   # MAC OS X
elif _platform == "win32":
   # Windows
elif _platform == "win64":
    # Windows 64-bit

Ответ 5

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

>>> import sys
>>> sys.platform
'linux2'

Ответ 6

Если вы хотите, чтобы данные читались пользователем, но все еще были подробными, вы можете использовать platform.platform()

>>> import platform
>>> platform.platform()
'Linux-3.3.0-8.fc16.x86_64-x86_64-with-fedora-16-Verne'

Вот несколько возможных звонков, которые вы можете сделать, чтобы определить, где вы находитесь

import platform
import sys

def linux_distribution():
  try:
    return platform.linux_distribution()
  except:
    return "N/A"

print("""Python version: %s
dist: %s
linux_distribution: %s
system: %s
machine: %s
platform: %s
uname: %s
version: %s
mac_ver: %s
""" % (
sys.version.split('\n'),
str(platform.dist()),
linux_distribution(),
platform.system(),
platform.machine(),
platform.platform(),
platform.uname(),
platform.version(),
platform.mac_ver(),
))

Выходные данные этого скрипта работали на нескольких разных системах (Linux, Windows, Solaris, MacOS), а архитектуры (x86, x64, Itanium, power pc, sparc) доступны здесь: https://github.com/hpcugent/easybuild/вики /OS_flavor_name_version

Например, сервер Ubuntu 12.04 дает:

Python version: ['2.6.5 (r265:79063, Oct  1 2012, 22:04:36) ', '[GCC 4.4.3]']
dist: ('Ubuntu', '10.04', 'lucid')
linux_distribution: ('Ubuntu', '10.04', 'lucid')
system: Linux
machine: x86_64
platform: Linux-2.6.32-32-server-x86_64-with-Ubuntu-10.04-lucid
uname: ('Linux', 'xxx', '2.6.32-32-server', '#62-Ubuntu SMP Wed Apr 20 22:07:43 UTC 2011', 'x86_64', '')
version: #62-Ubuntu SMP Wed Apr 20 22:07:43 UTC 2011
mac_ver: ('', ('', '', ''), '')

Ответ 7

Я делаю это

import sys
print sys.platform

Документы здесь: sys.platform.

Все, что вам нужно, вероятно, находится в модуле sys.

Ответ 8

Как насчет нового ответа:

import psutil
psutil.MACOS   #True (OSX is deprecated)
psutil.WINDOWS #False
psutil.LINUX   #False 

Это был бы вывод, если бы я использовал MACOS

Ответ 9

Я использую инструмент WLST, который поставляется с weblogic, и он не реализует пакет платформы.

wls:/offline> import os
wls:/offline> print os.name
java 
wls:/offline> import sys
wls:/offline> print sys.platform
'java1.5.0_11'

Помимо исправления системы javaos.py(проблема с os.system() в Windows 2003 с jdk1.5) (что я не могу сделать, я должен использовать weblogic из коробки), это то, что я использую:

def iswindows():
  os = java.lang.System.getProperty( "os.name" )
  return "win" in os.lower()

Ответ 10

>>> import platform
>>> platform.system()

Ответ 11

/usr/bin/python3.2

def cls():
    from subprocess import call
    from platform import system

    os = system()
    if os == 'Linux':
        call('clear', shell = True)
    elif os == 'Windows':
        call('cls', shell = True)

Ответ 12

Для Jython единственный способ получить имя os, которое я нашел, - проверить свойство os.name Java (проверено с модулями sys, os и platform для Jython 2.5.3 на WinXP):

def get_os_platform():
    """return platform name, but for Jython it uses os.name Java property"""
    ver = sys.platform.lower()
    if ver.startswith('java'):
        import java.lang
        ver = java.lang.System.getProperty("os.name").lower()
    print('platform: %s' % (ver))
    return ver

Ответ 13

Я начал более систематический список значений, которые вы можете ожидать, используя различные модули (не стесняйтесь редактировать и добавлять свою систему):

Linux (64 бит) + WSL

os.name                     posix
sys.platform                linux
platform.system()           Linux
sysconfig.get_platform()    linux-x86_64
platform.machine()          x86_64
platform.architecture()     ('64bit', '')
  • пробовал с archlinux и mint, получил те же результаты
  • на python2 к sys.platform sys.platform версия ядра, например, linux2, все остальное остается идентичным
  • тот же вывод в подсистеме Windows для Linux (пробовал с Ubuntu 18.04 LTS), за исключением platform.architecture() = ('64bit', 'ELF')

ОКНА (64 бита)

(с 32-битным столбцом в 32-битной подсистеме)

official python installer   64bit                     32bit
-------------------------   -----                     -----
os.name                     nt                        nt
sys.platform                win32                     win32
platform.system()           Windows                   Windows
sysconfig.get_platform()    win-amd64                 win32
platform.machine()          AMD64                     AMD64
platform.architecture()     ('64bit', 'WindowsPE')    ('64bit', 'WindowsPE')

msys2                       64bit                     32bit
-----                       -----                     -----
os.name                     posix                     posix
sys.platform                msys                      msys
platform.system()           MSYS_NT-10.0              MSYS_NT-10.0-WOW
sysconfig.get_platform()    msys-2.11.2-x86_64        msys-2.11.2-i686
platform.machine()          x86_64                    i686
platform.architecture()     ('64bit', 'WindowsPE')    ('32bit', 'WindowsPE')

msys2                       mingw-w64-x86_64-python3  mingw-w64-i686-python3
-----                       ------------------------  ----------------------
os.name                     nt                        nt
sys.platform                win32                     win32
platform.system()           Windows                   Windows
sysconfig.get_platform()    mingw                     mingw
platform.machine()          AMD64                     AMD64
platform.architecture()     ('64bit', 'WindowsPE')    ('32bit', 'WindowsPE')

cygwin                      64bit                     32bit
------                      -----                     -----
os.name                     posix                     posix
sys.platform                cygwin                    cygwin
platform.system()           CYGWIN_NT-10.0            CYGWIN_NT-10.0-WOW
sysconfig.get_platform()    cygwin-3.0.1-x86_64       cygwin-3.0.1-i686
platform.machine()          x86_64                    i686
platform.architecture()     ('64bit', 'WindowsPE')    ('32bit', 'WindowsPE')

Некоторые замечания:

  • есть также distutils.util.get_platform() который идентичен 'sysconfig.get_platform
  • Анаконда на Windows такая же, как официальный установщик Python для Windows
  • У меня нет ни Mac, ни настоящей 32-битной системы, и я не был мотивирован сделать это онлайн

Чтобы сравнить с вашей системой, просто запустите этот скрипт (и, пожалуйста, добавьте результаты здесь, если не хватает :)

from __future__ import print_function
import os
import sys
import platform
import sysconfig

print("os.name                      ",  os.name)
print("sys.platform                 ",  sys.platform)
print("platform.system()            ",  platform.system())
print("sysconfig.get_platform()     ",  sysconfig.get_platform())
print("platform.machine()           ",  platform.machine())
print("platform.architecture()      ",  platform.architecture())

Ответ 14

Интересные результаты по окнам 8:

>>> import os
>>> os.name
'nt'
>>> import platform
>>> platform.system()
'Windows'
>>> platform.release()
'post2008Server'

Изменить: Это bug

Ответ 15

Остерегайтесь, если вы работаете в Windows с Cygwin, где os.name есть posix.

>>> import os, platform
>>> print os.name
posix
>>> print platform.system()
CYGWIN_NT-6.3-WOW

Ответ 16

в том же духе....

import platform
is_windows=(platform.system().lower().find("win") > -1)

if(is_windows): lv_dll=LV_dll("my_so_dll.dll")
else:           lv_dll=LV_dll("./my_so_dll.so")

Ответ 17

Если вы не ищете версию ядра и т.д., но, глядя на дистрибутив Linux, вы можете использовать следующие

в python2.6 +

>>> import platform
>>> print platform.linux_distribution()
('CentOS Linux', '6.0', 'Final')
>>> print platform.linux_distribution()[0]
CentOS Linux
>>> print platform.linux_distribution()[1]
6.0

в python2.4

>>> import platform
>>> print platform.dist()
('centos', '6.0', 'Final')
>>> print platform.dist()[0]
centos
>>> print platform.dist()[1]
6.0

Очевидно, что это будет работать только в том случае, если вы используете это в linux. Если вы хотите иметь более общий script на разных платформах, вы можете смешать это с образцами кода, указанными в других ответах.

Ответ 18

попробуйте следующее:

import os

os.uname()

и вы можете сделать это:

info=os.uname()
info[0]
info[1]

Ответ 19

Проверьте доступные тесты с платформой модуля и распечатайте ответ для своей системы:

import platform

print dir(platform)

for x in dir(platform):
    if x[0].isalnum():
        try:
            result = getattr(platform, x)()
            print "platform."+x+": "+result
        except TypeError:
            continue

Ответ 20

Вы также можете использовать только модуль платформы без импорта модуля os для получения всей информации.

>>> import platform
>>> platform.os.name
'posix'
>>> platform.uname()
('Darwin', 'mainframe.local', '15.3.0', 'Darwin Kernel Version 15.3.0: Thu Dec 10 18:40:58 PST 2015; root:xnu-3248.30.4~1/RELEASE_X86_64', 'x86_64', 'i386')

Хорошая и аккуратная компоновка для целей отчетности может быть достигнута с использованием этой строки:

for i in zip(['system','node','release','version','machine','processor'],platform.uname()):print i[0],':',i[1]

Это дает этот результат:

system : Darwin
node : mainframe.local
release : 15.3.0
version : Darwin Kernel Version 15.3.0: Thu Dec 10 18:40:58 PST 2015; root:xnu-3248.30.4~1/RELEASE_X86_64
machine : x86_64
processor : i386

Обычно отсутствует версия операционной системы, но вы должны знать, используете ли вы windows, linux или mac, независимый от платформы способ использовать этот тест:

In []: for i in [platform.linux_distribution(),platform.mac_ver(),platform.win32_ver()]:
   ....:     if i[0]:
   ....:         print 'Version: ',i[0]

Ответ 21

Существует 3 способа получить ОС в Python, каждый со своими плюсами и минусами:

Метод 1

>>> import sys
>>> sys.platform
'win32'  # could be 'linux', 'linux2, 'darwin', 'freebsd8' etc

Как это работает (источник): внутренне он вызывает API-интерфейсы ОС, чтобы получить имя ОС в соответствии с определением ОС. Это, очевидно, может меняться от версии к версии, поэтому лучше не использовать напрямую. См. здесь, чтобы узнать различные значения для ОС.

Метод 2

>>> import os
>>> os.name
'nt'  # for Linux and Mac it prints 'posix'

Как это работает (источник): Внутренне он проверяет, есть ли в python модули для ОС, называемые posix или nt. Если вы хотите импортировать эти модули и вызывать методы, это прекрасно работает. Обратите внимание, что нет различий между Linux и OSX.

Метод 3

>>> import platform
>>> platform.system()
'Windows' # for Linux it prints 'Linux', Mac it prints ''Darwin'

Как это работает (источник): Внутренне он в конечном итоге вызовет внутренние API-интерфейсы ОС, получит имя для конкретной версии ОС, такое как "win32" или "win16" или "linux1", а затем нормализуется к более общим именам например, "Windows", "Linux" или "Darwin", применяя несколько эвристик. Это лучший портативный способ получения нормализованного имени ОС.

Резюме

  • Если вы хотите проверить, является ли ОС Windows, Linux или OSX, то самый надежный способ - platform.system().
  • Если вы хотите делать вызовы для конкретной ОС, но через встроенные модули Python posix или nt, используйте os.name.
  • Если вы хотите получить необработанное имя ОС, как указано самой ОС, используйте sys.platform.

Ответ 22

Если вы используете MacOS X и используете platform.system() вы получаете darwin, потому что macOS X построен на Apple Darwin OS. Darwin является ядром macOS X и по сути является macOS X без графического интерфейса.

Ответ 23

Это решение работает как для python и для jython.

модуль os_identify.py:

import platform
import os

# This module contains functions to determine the basic type of
# OS we are running on.
# Contrary to the functions in the 'os' and 'platform' modules,
# these allow to identify the actual basic OS,
# no matter whether running on the 'python' or 'jython' interpreter.

def is_linux():
    try:
        platform.linux_distribution()
        return True
    except:
        return False

def is_windows():
    try:
        platform.win32_ver()
        return True
    except:
        return False

def is_mac():
    try:
        platform.mac_ver()
        return True
    except:
        return False

def name():
    if is_linux():
        return "Linux"
    elif is_windows():
        return "Windows"
    elif is_mac():
        return "Mac"
    else:
        return "<unknown>" 

Используйте как это:

import os_identify

print "My OS: " + os_identify.name()

Ответ 24

import sys
import platform

# return a platform identifier
print(sys.platform)

# return system/os name
print(platform.system())

# print system info
# similar to 'uname' command in unix
print(platform.uname())

Ответ 25

Используйте ключевые слова import os и os.name.

Ответ 26

Как насчет простой реализации Enum, подобной следующей? Нет необходимости во внешних библиотеках!

import platform
from enum import Enum
class OS(Enum):
    def checkPlatform(osName):
        return osName.lower()== platform.system().lower()

    MAC = checkPlatform("darwin")
    LINUX = checkPlatform("linux")
    WINDOWS = checkPlatform("windows")  #I haven't test this one

Просто вы можете получить доступ с помощью значения Enum

if OS.LINUX.value:
    print("Cool it is Linux")

PS это python3

Ответ 27

Вы можете посмотреть на код в pyOSinfo который является частью пакета pip-date, чтобы получить наиболее актуальную информацию об ОС, как видно из вашего дистрибутива Python.

Одна из наиболее распространенных причин, по которой люди хотят проверить свою ОС, - совместимость терминала и наличие определенных системных команд. К сожалению, успех этой проверки в некоторой степени зависит от вашей установки на Python и ОС. Например, uname недоступна в большинстве пакетов Python для Windows. Вышеприведенная программа на python покажет вывод наиболее часто используемых встроенных функций, уже предоставленных os, sys, platform, site.

enter image description here

Поэтому лучший способ получить только необходимый код - это рассмотреть в качестве примера. (Я думаю, я мог бы просто вставить это здесь, но это не было бы политкорректно.)

Ответ 28

Я опаздываю к игре, но, на всякий случай, кому-то это нужно, эту функцию я использую для корректировки своего кода, чтобы он работал на Windows, Linux и MacO:

import sys
def get_os(osoptions={'linux':'linux','Windows':'win','macos':'darwin'}):
    '''
    get OS to allow code specifics
    '''   
    opsys = [k for k in osoptions.keys() if sys.platform.lower().find(osoptions[k].lower()) != -1]
    try:
        return opsys[0]
    except:
        return 'unknown_OS'

Ответ 29

Только для полноты переменная окружения "OS", по-видимому, определяется везде. В Windows XP/7/8/10 установлено значение "Windows_NT". В Linux SuSE SP2 установлено значение "x86-64 linux sles11 [2]". У меня нет доступа к машинам OS-X или BSD, было бы интересно также проверить их.

import os

os_name = os.getenv("OS")
if os_name == "Windows_NT":
    # Windows
elif "linux" in os_name:
    # Linux
elif ...