Pregunta

¿Qué necesito mirar para ver si estoy en Windows o Unix, etc.?

¿Fue útil?

Solución

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

La salida de platform.system() es como sigue:

  • Linux: Linux
  • Mac: Darwin
  • Ventanas: Windows

Ver: plataforma: acceso a los datos de identificación de la plataforma subyacente

Otros consejos

Maldita sea, lbrandy se me adelantó, ¡pero eso no significa que no pueda brindarles los resultados del sistema para Vista!

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

...y no puedo creer que nadie haya publicado uno para Windows 10 todavía:

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

Para que conste, aquí están los resultados en Mac:

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

Código de muestra para diferenciar los sistemas operativos que usan 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

También puedes usar sys.platform si ya has importado el sistema y no quieres importar otro módulo.

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

Si desea datos legibles por el usuario pero aún detallados, puede utilizar plataforma.plataforma()

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

A continuación se muestran algunas llamadas posibles diferentes que puede realizar para identificar dónde se encuentra

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

Los resultados de este script se ejecutaron en algunos sistemas diferentes (Linux, Windows, Solaris, MacOS) y arquitecturas (x86, x64, Itanium, power pc, sparc) están disponibles aquí: https://github.com/hpcugent/easybuild/wiki/OS_flavor_name_version

El servidor Ubuntu 12.04, por ejemplo, proporciona:

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

hago esto

import sys
print sys.platform

Documentos aquí: plataforma sys.

Todo lo que necesitas probablemente esté en el módulo sys.

Estoy usando la herramienta WLST que viene con weblogic y no implementa el paquete de plataforma.

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

Aparte de parchear el sistema javaos.py (problema con os.system() en Windows 2003 con jdk1.5) (lo cual no puedo hacer, tengo que usar weblogic listo para usar), esto es lo que uso:

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

¿Qué tal una nueva respuesta?

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

Este sería el resultado si estuviera 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, la única forma de obtener el nombre del sistema operativo que encontré es verificar os.name Propiedad de Java (probada con sys, os y platform módulos para Jython 2.5.3 en 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

Comencé una lista un poco más sistemática de los valores que puede esperar al usar los distintos módulos (siéntase libre de editar y agregar su 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', '')
  • Probé con archlinux y mint y obtuve los mismos resultados.
  • en python2 sys.platform tiene el sufijo de la versión del kernel, p. linux2, todo lo demás sigue igual
  • mismo resultado en el subsistema de Windows para Linux (probado con ubuntu 18.04 LTS), excepto platform.architecture() = ('64bit', 'ELF')

VENTANAS (64 bits)

(con una columna de 32 bits ejecutándose en el 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')

Algunas observaciones:

  • también hay distutils.util.get_platform() que es idéntico a `sysconfig.get_platform
  • anaconda en Windows es igual que el instalador oficial de Python para Windows
  • No tengo una Mac ni un verdadero sistema de 32 bits y no estaba motivado para hacerlo en línea.

Para comparar con su sistema, simplemente ejecute este script (y agregue los resultados aquí si faltan :)

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 interesantes en Windows 8:

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

Editar: Eso es un bicho

Cuidado si estás en Windows con Cygwin donde os.name es posix.

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

en la misma vena....

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

Si no busca la versión del kernel, etc., pero busca la distribución de Linux, es posible que desee utilizar lo siguiente

en 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

en Python2.4

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

Obviamente, esto funcionará sólo si lo está ejecutando en Linux.Si desea tener un script más genérico en todas las plataformas, puede combinarlo con ejemplos de código que se proporcionan en otras respuestas.

prueba esto:

import os

os.uname()

y puedes hacerlo:

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

Consulte las pruebas disponibles con plataforma de módulos e imprima la respuesta para su 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

También puede usar solo el módulo de plataforma sin importar el módulo del sistema operativo para obtener toda la información.

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

Se puede lograr un diseño agradable y ordenado para fines de generación de informes utilizando esta línea:

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

Eso da este resultado:

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

Lo que normalmente falta es la versión del sistema operativo, pero debes saber si estás ejecutando Windows, Linux o Mac. Una forma independiente de la plataforma es utilizar esta prueba:

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

Si está ejecutando macOS X y ejecuta platform.system() Obtienes Darwin porque MacOS X está construido en el sistema operativo Darwin de Apple.Darwin es el núcleo de macOS X y es esencialmente macOS X sin la GUI.

Esta solución funciona para ambos. python y jython.

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

Úselo así:

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

Utilizar el import os y os.name palabras clave.

¿Qué tal una implementación simple de Enum como la siguiente?¡No se necesitan 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

Simplemente puedes acceder con el valor Enum.

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

PD: Es python3

Puedes mirar el código en pyOSinfo que es parte del fecha-pip paquete, para obtener la información más relevante del sistema operativo, como se ve en su distribución de Python.

Una de las razones más comunes por las que la gente quiere comprobar su sistema operativo es la compatibilidad del terminal y si ciertos comandos del sistema están disponibles.Desafortunadamente, el éxito de esta verificación depende en cierta medida de su instalación de Python y de su sistema operativo.Por ejemplo, uname no está disponible en la mayoría de los paquetes de Python de Windows.El programa Python anterior le mostrará el resultado de las funciones integradas más utilizadas, ya proporcionadas por os, sys, platform, site.

enter image description here

Entonces, la mejor manera de obtener solo el código esencial es mirar eso como ejemplo.(Supongo que podría haberlo pegado aquí, pero eso no habría sido políticamente correcto).

Llegué tarde al juego pero, en caso de que alguien lo necesite, esta es una función que uso para hacer ajustes en mi código para que se ejecute en Windows, Linux y 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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top