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

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

27 ответов

  1. 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'
    
  2. Вы также можете использовать sys.платформа, Если вы уже импортировали sys и не хотите импортировать другой модуль

    >>> import sys
    >>> sys.platform
    'linux2'
    
  3. Я использую инструмент 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 (проблема с ОС.system () в windows 2003 с jdk1.5) (что я не могу сделать, я должен использовать weblogic из коробки), это то, что я использую:

    def iswindows():
      os = java.lang.System.getProperty( "os.name" )
      return "win" in os.lower()
    
  4. в том же духе.

    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")
    
  5. / 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)
    
  6. Для Jython единственный способ получить имя ОС, который я нашел, — это проверить 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
    
  7. Если вы хотите, чтобы пользователь читал данные, но все еще подробно, вы можете использовать платформу.платформа()

    >>> 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/wiki/OS_flavor_name_version

  8. Если вы не ищете версию ядра и т. д., Но ищете дистрибутив 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. Если вы хотите иметь более общий сценарий на разных платформах, вы можете смешать его с примерами кода, приведенными в других ответах.

  9. Пример кода для дифференциации ОС с помощью 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
    
  10. Проверьте доступные тесты с платформой модуля и распечатайте ответ для вашей системы:

    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
    
  11. попробовать это:

    import os
    
    os.uname()
    

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

    info=os.uname()
    info[0]
    info[1]
    
  12. Будьте осторожны, если вы на Windows с Cygwin, где os.nameнаходится posix.

    >>> import os, platform
    >>> print os.name
    posix
    >>> print platform.system()
    CYGWIN_NT-6.3-WOW
    
  13. Просто для полноты, переменная среды «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 ...
    
  14. Вы также можете использовать только модуль платформы без импорта модуля ОС, чтобы получить всю информацию.

    >>> 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 платформа indipendent способ использовать этот тест:

    In []: for i in [platform.linux_distribution(),platform.mac_ver(),platform.win32_ver()]:
       ....:     if i[0]:
       ....:         print 'Version: ',i[0]
    
  15. Как насчет нового ответа:

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

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

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

  17. Как насчет простой Enum реализации, как показано ниже? Отсутствие потребности для внешних libs!

    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")
    

    P. S это python3

  18. Это решение работает и для pythonjython.

    модуль 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()
    
  19. 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())
    
  20. Вы можете посмотреть код, в pyOSinfoкотором находится часть пакета pip-date, чтобы получить наиболее релевантную информацию о ОС, как видно из вашего дистрибутива Python.

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

    Введите описание изображения здесь

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

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

    Linux (64bit) + WSL

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

    WINDOWS (64bit)

    (при колонка 32bit бежать в подсистеме 32bit)

    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
    • anaconda на windows, так же, как официальный python Windows installer
    • У меня нет 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())