Python: Что OS я бегу дальше?

голоса
410

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

Задан 05/08/2008 в 04:23
источник пользователем
На других языках...                            


29 ответов

голоса
513

>>> import os
>>> print os.name
posix
>>> import platform
>>> platform.system()
'Linux'
>>> platform.release()
'2.6.22-15-generic'

Выход platform.system()выглядит следующим образом :

  • Linux: Linux
  • Mac: Darwin
  • Окна: Windows

См: платформа - Доступ к идентифицирующей информации , лежащей в основе платформы

Ответил 05/08/2008 в 04:27
источник пользователем

голоса
146

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'
Ответил 05/08/2008 в 04:57
источник пользователем

голоса
108

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

>>> import os
>>> os.name
'posix'
>>> import platform
>>> platform.system()
'Darwin'
>>> platform.release()
'8.11.1'
Ответил 05/08/2008 в 05:13
источник пользователем

голоса
73

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

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
Ответил 16/09/2014 в 08:42
источник пользователем

голоса
35

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

>>> import sys
>>> sys.platform
'linux2'
Ответил 26/08/2008 в 16:41
источник пользователем

голоса
24

Если вы хотите читаемые данные пользователя , но до сих пор подробно, вы можете использовать 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(),
))

Выходы этого сценария работал на нескольких различных системах можно найти здесь: https://github.com/hpcugent/easybuild/wiki/OS_flavor_name_version

Ответил 23/01/2013 в 11:55
источник пользователем

голоса
17

я делаю это

import sys
print sys.platform

Docs здесь: sys.platform .

Все, что вам нужно, это, вероятно, в модуле Sys.

Ответил 16/02/2009 в 15:43
источник пользователем

голоса
10

Я использую инструмент 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()
Ответил 11/06/2010 в 08:37
источник пользователем

голоса
9
>>> import platform
>>> platform.system()
Ответил 25/06/2011 в 12:10
источник пользователем

голоса
8

Для Jython единственный способ получить имя Os я нашел это проверить os.nameJava свойство (пробовал с 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
Ответил 09/01/2013 в 09:47
источник пользователем

голоса
7

/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)
Ответил 10/10/2011 в 01:11
источник пользователем

голоса
6

Смотрите, если вы на Windows , с Cygwin , где os.nameнаходится posix.

>>> import os, platform
>>> print os.name
posix
>>> print platform.system()
CYGWIN_NT-6.3-WOW
Ответил 08/07/2015 в 14:46
источник пользователем

голоса
6

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

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

Edit: Это ошибка

Ответил 14/02/2013 в 23:44
источник пользователем

голоса
5

попробуй это:

import os

os.uname()

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

info=os.uname()
info[0]
info[1]
Ответил 16/01/2015 в 18:13
источник пользователем

голоса
5

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

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

Ответил 28/03/2013 в 06:19
источник пользователем

голоса
5

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

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")
Ответил 28/09/2011 в 18:54
источник пользователем

голоса
4

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

import psutil
psutil.OSX     #True
psutil.WINDOWS #False
psutil.LINUX   #False 

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

Ответил 14/08/2017 в 17:00
источник пользователем

голоса
3

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

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, Subsystem для Linux (пробовал с Ubuntu 18.04 LTS), за исключением platform.architecture() = ('64bit', 'ELF')

Windows (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
  • анаконда на окнах так же, как официальный инсталлятор питона окна
  • У меня нет 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())
Ответил 23/02/2019 в 02:39
источник пользователем

голоса
3

Кроме того, можно использовать только модуль платформы без импортирования модуля 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]
Ответил 20/08/2016 в 08:03
источник пользователем

голоса
3

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

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
Ответил 30/10/2014 в 00:43
источник пользователем

голоса
2
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())
Ответил 03/02/2019 в 22:43
источник пользователем

голоса
1

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

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

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

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

Ответил 07/02/2019 в 21:10
источник пользователем

голоса
1

Это решение работает как 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()
Ответил 29/01/2019 в 13:06
источник пользователем

голоса
1

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

Ответил 13/01/2018 в 21:29
источник пользователем

голоса
1

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

Ответил 07/05/2017 в 03:07
источник пользователем

голоса
0

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

Метод 1

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

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

Способ 2

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

Как это работает ( источник ): Внутренне он проверяет , если питон имеет модули ОС-специфические называемые POSIX или нт. Если вы хотите импортировать эти модули и методы вызова на него, это прекрасно работает. Обратите внимание , что не существует никакого различия между Linux и OSX.

Способ 3

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

Как это работает ( источник ): Внутренне он будет в конечном итоге называть внутренние интерфейсы ОС, получить OS версии конкретного названия , как «win32» или «Win16» или «linux1» , а затем нормализуют к более общие имена , как «Windows» или «Linux» или «Дарвин», применяя несколько эвристик. Это лучший портативный способ получить нормализованное название операционной системы.

Резюме

  • Если вы хотите проверить , если ОС Windows , или Linux или OSX , то самый надежный способ platform.system().
  • Если вы хотите , чтобы сделать OS конкретных вызовов , но с помощью встроенных модулей Python posixили ntзатем использовать os.name.
  • Если вы хотите , чтобы получить сырое название операционной системы, поставляемые самой ОС , то использовать sys.platform.
Ответил 24/09/2019 в 02:28
источник пользователем

голоса
0

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

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'
Ответил 22/05/2019 в 16:32
источник пользователем

голоса
0

Как насчет простой реализации 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")

PS Это python3

Ответил 27/09/2018 в 17:39
источник пользователем

голоса
-4

Просто для полноты картины, переменная «ОС» среда, кажется, всюду определена. В 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 ...
Ответил 01/12/2015 в 07:28
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more