Вопрос:

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

python cross-platform

194086 просмотра

27 ответа

173070 Репутация автора

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

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

Ответы (27)


614 плюса

11115 Репутация автора

Решение
>>> 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 плюса

7681 Репутация автора

Черт - Бренди победил меня, но это не значит, что я не могу предоставить вам результаты системы для 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 плюса

173070 Репутация автора

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

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

37 плюса

16489 Репутация автора

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

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

19 плюса

1717 Репутация автора

я сделаю это

import sys
print sys.platform

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

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

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

11 плюса

760 Репутация автора

Я использую инструмент 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

9 плюса

0 Репутация автора

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

5 плюса

59 Репутация автора

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

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

7 плюса

71 Репутация автора

/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

9 плюса

40143 Репутация автора

Для 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

28 плюса

5067 Репутация автора

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

6 плюса

66881 Репутация автора

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

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

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

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

5 плюса

2882 Репутация автора

Если вы не ищете версию ядра и т. Д., Но ищете дистрибутив 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

82 плюса

850 Репутация автора

Пример кода для разграничения ОС, использующих 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

4 плюса

2014 Репутация автора

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

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

5 плюса

0 Репутация автора

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

import os

os.uname()

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

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

7 плюса

10667 Репутация автора

Остерегайтесь, если вы находитесь на 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

-4 плюса

867 Репутация автора

Просто для полноты, переменная окружения "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

4 плюса

5929 Репутация автора

Вы также можете использовать только модуль платформы без импорта модуля 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 плюс

30 Репутация автора

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

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

10 плюса

4748 Репутация автора

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

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

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

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

1 плюс

11 Репутация автора

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

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

0 плюса

655 Репутация автора

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

2435 Репутация автора

Это решение работает как для, так 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

1 плюс

21 Репутация автора

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 плюса

4319 Репутация автора

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

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

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

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

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

0 плюса

3063 Репутация автора

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

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
Вопросы из категории :
32x32