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

python cross-platform

194086 просмотра

27 ответа

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

Автор: Mark Harrison Источник Размещён: 17.05.2019 03:01

Ответы (27)


614 плюса

Решение
>>> 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

См .: платформа - доступ к данным идентификации базовой платформы

Автор: Louis Brandy Размещён: 05.08.2008 03:27

160 плюса

Черт - Бренди победил меня, но это не значит, что я не могу предоставить вам результаты системы для 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'
Автор: Joey deVilla Размещён: 05.08.2008 03:57

115 плюса

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

>>> import os
>>> os.name
'posix'
>>> import platform
>>> platform.system()
'Darwin'
>>> platform.release()
'8.11.1'
Автор: Mark Harrison Размещён: 05.08.2008 04:13

82 плюса

Пример кода для разграничения ОС, использующих 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
Автор: user3928804 Размещён: 16.09.2014 07:42

37 плюса

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

>>> import sys
>>> sys.platform
'linux2'
Автор: Moe Размещён: 26.08.2008 03:41

28 плюса

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

Автор: Jens Timmerman Размещён: 23.01.2013 10:55

19 плюса

я сделаю это

import sys
print sys.platform

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

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

Автор: ggambett Размещён: 16.02.2009 02:43

11 плюса

Я использую инструмент 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()
Автор: Alftheo Размещён: 11.06.2010 07:37

10 плюса

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

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

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

Автор: whackamadoodle3000 Размещён: 14.08.2017 05:00

9 плюса

>>> import platform
>>> platform.system()
Автор: user813713 Размещён: 25.06.2011 11:10

9 плюса

Для 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
Автор: Michał Niklas Размещён: 09.01.2013 08: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)
Автор: urantialife Размещён: 10.10.2011 12:11

7 плюса

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

>>> import os, platform
>>> print os.name
posix
>>> print platform.system()
CYGWIN_NT-6.3-WOW
Автор: guaka Размещён: 08.07.2015 02:46

6 плюса

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

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

Изменить: это ошибка

Автор: Eric Размещён: 14.02.2013 10:44

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")
Автор: Elden Размещён: 28.09.2011 05:54

5 плюса

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

Автор: sunil Размещён: 28.03.2013 05:19

5 плюса

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

import os

os.uname()

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

info=os.uname()
info[0]
info[1]
Автор: user4410697 Размещён: 16.01.2015 06:13

4 плюса

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

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
Автор: Stefan Gruenwald Размещён: 30.10.2014 12:43

4 плюса

Вы также можете использовать только модуль платформы без импорта модуля 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]
Автор: G M Размещён: 20.08.2016 08:03

1 плюс

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

Автор: nabu Размещён: 07.05.2017 03:07

1 плюс

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

Автор: Alexander Calvert Размещён: 13.01.2018 09:29

1 плюс

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())
Автор: Yossarian42 Размещён: 03.02.2019 10:43

0 плюса

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

Автор: Memin Размещён: 27.09.2018 05:39

0 плюса

Это решение работает как для, так 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()
Автор: hoijui Размещён: 29.01.2019 01:06

0 плюса

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

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

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

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

Автор: not2qubit Размещён: 07.02.2019 09:10

0 плюса

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

Linux (64 бит)

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версия ядра, например linux2, все остальное остается идентичным

ОКНА (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())
Автор: coldfix Размещён: 23.02.2019 02:39

-4 плюса

Просто для полноты, переменная окружения "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 ...
Автор: Alexey Polonsky Размещён: 01.12.2015 07:28
Вопросы из категории :
32x32