Pergunta

O que preciso verificar para saber se estou no Windows ou no Unix, etc.?

Foi útil?

Solução

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

A saída de platform.system() é o seguinte:

  • Linux: Linux
  • Mac: Darwin
  • Janelas: Windows

Ver: plataforma — Acesso aos dados de identificação da plataforma subjacente

Outras dicas

Droga - lbrandy me venceu, mas isso não significa que eu não possa fornecer os resultados do sistema para o Vista!

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

...e não acredito que ninguém postou um para Windows 10 ainda:

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

Para registro, aqui estão os resultados no Mac:

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

Código de exemplo para diferenciar sistemas operacionais usando 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

Você também pode usar sys.platform se já importou sys e não deseja importar outro módulo

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

Se você deseja dados legíveis pelo usuário, mas ainda detalhados, você pode usar plataforma.plataforma()

>>> import platform
>>> platform.platform()
'Linux-3.3.0-8.fc16.x86_64-x86_64-with-fedora-16-Verne'

Aqui estão algumas possíveis chamadas diferentes que você pode fazer para identificar onde você está

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

As saídas deste script foram executadas em alguns sistemas diferentes (Linux, Windows, Solaris, MacOS) e arquiteturas (x86, x64, Itanium, power pc, sparc) e estão disponíveis aqui: https://github.com/hpcugent/easybuild/wiki/OS_flavor_name_version

O servidor Ubuntu 12.04, por exemplo, fornece:

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: ('', ('', '', ''), '')

Eu faço isso

import sys
print sys.platform

Documentos aqui: sys.plataforma.

Tudo que você precisa provavelmente está no módulo sys.

Estou usando a ferramenta WLST que acompanha o weblogic e ela não implementa o pacote da plataforma.

wls:/offline> import os
wls:/offline> print os.name
java 
wls:/offline> import sys
wls:/offline> print sys.platform
'java1.5.0_11'

Além de corrigir o sistema javaos.py (problema com os.system() no Windows 2003 com jdk1.5) (o que não posso fazer, tenho que usar o weblogic pronto para uso), é isso que eu uso:

def iswindows():
  os = java.lang.System.getProperty( "os.name" )
  return "win" in os.lower()

Que tal uma nova resposta:

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

Esta seria a saída se eu estivesse usando 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)

Para Jython, a única maneira de obter o nome do sistema operacional que encontrei é verificar os.name Propriedade Java (tentei com sys, os e platform módulos para Jython 2.5.3 no 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

Comecei uma listagem um pouco mais sistemática de quais valores você pode esperar usando os vários módulos (sinta-se à vontade para editar e adicionar seu sistema):

Linux (64 bits) + WSL

os.name                     posix
sys.platform                linux
platform.system()           Linux
sysconfig.get_platform()    linux-x86_64
platform.machine()          x86_64
platform.architecture()     ('64bit', '')
  • tentei com archlinux e mint, obtive os mesmos resultados
  • em python2 sys.platform é sufixado pela versão do kernel, por ex. linux2, todo o resto permanece idêntico
  • mesma saída no subsistema Windows para Linux (tentado com ubuntu 18.04 LTS), exceto platform.architecture() = ('64bit', 'ELF')

WINDOWS (64 bits)

(com coluna de 32 bits em execução no subsistema de 32 bits)

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

Algumas observações:

  • há também distutils.util.get_platform() que é idêntico a `sysconfig.get_platform
  • anaconda no windows é igual ao instalador oficial do python windows
  • Não tenho um Mac nem um verdadeiro sistema de 32 bits e não estava motivado para fazer isso online

Para comparar com o seu sistema, simplesmente execute este script (e anexe os resultados aqui se estiver faltando :)

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

Resultados interessantes no Windows 8:

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

Editar: Aquilo é um erro

Cuidado se você estiver no Windows com Cygwin onde os.name é posix.

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

Na mesma veia....

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

Se você não está procurando a versão do kernel, etc., mas está procurando a distribuição Linux, você pode querer usar o seguinte

em 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

em python2.4

>>> import platform
>>> print platform.dist()
('centos', '6.0', 'Final')
>>> print platform.dist()[0]
centos
>>> print platform.dist()[1]
6.0

Obviamente, isso funcionará apenas se você estiver executando no Linux.Se quiser ter um script mais genérico entre plataformas, você pode misturá-lo com exemplos de código fornecidos em outras respostas.

tente isto:

import os

os.uname()

e você pode fazer isso:

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

Confira os testes disponíveis com a plataforma do módulo e imprima a resposta para o seu sistema:

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

Você também pode usar apenas o módulo de plataforma sem importar o módulo OS para obter todas as informações.

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

Um layout bonito e organizado para fins de relatório pode ser alcançado usando esta linha:

for i in zip(['system','node','release','version','machine','processor'],platform.uname()):print i[0],':',i[1]

Isso dá esta saída:

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

O que geralmente falta é a versão do sistema operacional, mas você deve saber se estiver executando Windows, Linux ou Mac, uma forma independente de plataforma é usar este teste:

In []: for i in [platform.linux_distribution(),platform.mac_ver(),platform.win32_ver()]:
   ....:     if i[0]:
   ....:         print 'Version: ',i[0]

Se você estiver executando o macOS X e executar platform.system() Você fica com Darwin porque o MacOS X é construído no Darwin OS da Apple.Darwin é o kernel do macOS X e é essencialmente o macOS X sem a GUI.

Esta solução funciona para ambos python e jython.

módulo 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>" 

Use assim:

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

Use o import os e os.name palavras-chave.

Que tal uma implementação simples de Enum como a seguinte?Não há necessidade de bibliotecas externas!

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

Simplesmente você pode acessar com o valor Enum

if OS.LINUX.value:
    print("Cool it is Linux")

P.S É python3

Você pode ver o código em pyOSinfo que faz parte do data do pip pacote, para obter as informações mais relevantes do sistema operacional, conforme visto em sua distribuição Python.

Um dos motivos mais comuns pelos quais as pessoas desejam verificar seu sistema operacional é a compatibilidade do terminal e se determinados comandos do sistema estão disponíveis.Infelizmente, o sucesso dessa verificação depende um pouco da instalação do python e do sistema operacional.Por exemplo, uname não está disponível na maioria dos pacotes python do Windows.O programa python acima mostrará a saída das funções integradas mais comumente usadas, já fornecidas por os, sys, platform, site.

enter image description here

Portanto, a melhor maneira de obter apenas o código essencial é observar que como um exemplo.(Acho que poderia simplesmente ter colado aqui, mas isso não seria politicamente correto.)

Estou atrasado para o jogo, mas caso alguém precise, esta é uma função que utilizo para fazer ajustes no meu código para que rode em Windows, Linux e 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'
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top