Питон:На какой операционной системе я работаю?

StackOverflow https://stackoverflow.com/questions/1854

  •  08-06-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

>>> 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: Windows

Видишь: платформа — Доступ к идентифицирующим данным базовой платформы

Другие советы

Черт возьми, 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'

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

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

Пример кода для дифференциации ОС с использованием 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

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

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

Если вам нужны данные, доступные для чтения пользователем, но при этом подробные, вы можете использовать платформа.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/wiki/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: ('', ('', '', ''), '')

Я делаю это

import sys
print sys.platform

Документы здесь : система.платформа.

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

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

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

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

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

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

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

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

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

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

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 и mint, получил те же результаты
  • на python2 sys.platform имеет суффикс версии ядра, например linux2, все остальное остается неизменным
  • тот же вывод в подсистеме Windows для 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
  • anaconda в 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())

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

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

Редактировать: Это настоящий ошибка

Будьте осторожны, если вы используете Windows с Cygwin, где os.name является posix.

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

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

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

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

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

import os

os.uname()

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

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

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

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

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

>>> 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]

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

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

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

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

P.S Это python3

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

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

enter image description here

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

Я опаздываю в игру, но, на всякий случай, если кому-то это понадобится, эту функцию я использую для внесения изменений в свой код, чтобы он работал в 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'
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top