Python: ¿En qué sistema operativo me estoy ejecutando?

votos
410

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

Publicado el 05/08/2008 a las 04:23
fuente por usuario
En otros idiomas...                            


29 respuestas

votos
513

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

El resultado de platform.system()es el siguiente:

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

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

Respondida el 05/08/2008 a las 04:27
fuente por usuario

votos
146

Dang - lbrandy me ganó al golpe, pero eso no significa que no pueda darte 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 aún:

>>> import os
>>> os.name
'nt'
>>> import platform
>>> platform.system()
'Windows'
>>> platform.release()
'10'
Respondida el 05/08/2008 a las 04:57
fuente por usuario

votos
108

Para el registro, aquí están los resultados en Mac:

>>> import os
>>> os.name
'posix'
>>> import platform
>>> platform.system()
'Darwin'
>>> platform.release()
'8.11.1'
Respondida el 05/08/2008 a las 05:13
fuente por usuario

votos
35

También puede usar sys.platform si ya tiene sys importado y no desea importar otro módulo

>>> import sys
>>> sys.platform
'linux2'
Respondida el 26/08/2008 a las 16:41
fuente por usuario

votos
17

hago esto

import sys
print sys.platform

Documentos aquí: sys.platform .

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

Respondida el 16/02/2009 a las 15:43
fuente por usuario

votos
10

Estoy utilizando la herramienta WLST que viene con WebLogic, y que no aplique 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 ) (que no puedo hacer, tengo que usar WebLogic fuera de la caja), esto es lo que yo uso:

def iswindows():
  os = java.lang.System.getProperty( "os.name" )
  return "win" in os.lower()
Respondida el 11/06/2010 a las 08:37
fuente por usuario

votos
9
>>> import platform
>>> platform.system()
Respondida el 25/06/2011 a las 12:10
fuente por usuario

votos
5

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")
Respondida el 28/09/2011 a las 18:54
fuente por usuario

votos
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)
Respondida el 10/10/2011 a las 01:11
fuente por usuario

votos
8

Para Jython la única manera de obtener el nombre os he encontrado es comprobar os.namela propiedad de Java (tratado con sys, osy platformmódulos de Jython en WinXP 2.5.3):

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
Respondida el 09/01/2013 a las 09:47
fuente por usuario

votos
24

Si desea que el usuario puede leer los datos, pero todavía se detalla, puede utilizar platform.platform ()

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

He aquí un par de llamadas diferentes posibles 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(),
))

Las salidas de este guión corrió en unos pocos sistemas diferentes están disponibles aquí: https://github.com/hpcugent/easybuild/wiki/OS_flavor_name_version

Respondida el 23/01/2013 a las 11:55
fuente por usuario

votos
6

resultados interesantes en Windows 8:

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

Editar: Eso es un error

Respondida el 14/02/2013 a las 23:44
fuente por usuario

votos
5

Si no en busca de la versión del kernel, etc, pero en busca de la distribución de Linux es posible que desee utilizar la 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 sólo funcionará si está ejecutando esto en Linux. Si desea tener más comandos genérica en todas las plataformas, se pueden mezclar esto con ejemplos de código que figuran en otras respuestas.

Respondida el 28/03/2013 a las 06:19
fuente por usuario

votos
73

Código de ejemplo para diferenciar el uso de pitón de SO:

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
Respondida el 16/09/2014 a las 08:42
fuente por usuario

votos
3

Compruebe las pruebas disponibles con plataforma de módulo e imprimir la respuesta fuera 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
Respondida el 30/10/2014 a las 00:43
fuente por usuario

votos
5

prueba esto:

import os

os.uname()

y se puede hacer:

info=os.uname()
info[0]
info[1]
Respondida el 16/01/2015 a las 18:13
fuente por usuario

votos
6

Ten cuidado si estás en Windows con Cygwin donde os.nameestá posix.

>>> import os, platform
>>> print os.name
posix
>>> print platform.system()
CYGWIN_NT-6.3-WOW
Respondida el 08/07/2015 a las 14:46
fuente por usuario

votos
-4

Simplemente para la corrección, variable de entorno "OS" parece definirse por todas partes. En Windows XP / 7/8/10, se establece en "Windows_NT". En Linux SuSE SP2 se establece en "SLES11 Linux x86-64 [2]". No tengo acceso a las máquinas OS-X o BSD, sería interesante comprobar allí también.

import os

os_name = os.getenv("OS")
if os_name == "Windows_NT":
    # Windows
elif "linux" in os_name:
    # Linux
elif ...
Respondida el 01/12/2015 a las 04:28
fuente por usuario

votos
3

También puede utilizar solamente módulo de plataforma sin importar módulo os 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')

Un diseño agradable y ordenado para informar objetivo se puede lograr utilizando esta línea:

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

Eso le da a esta salida:

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 falta por lo general es la versión del sistema operativo, pero usted debe saber si está ejecutando Windows, Linux o Mac de forma autónoma plataforma es el uso de esta prueba:

In []: for i in [platform.linux_distribution(),platform.mac_ver(),platform.win32_ver()]:
   ....:     if i[0]:
   ....:         print 'Version: ',i[0]
Respondida el 20/08/2016 a las 05:03
fuente por usuario

votos
1

Utilice el import osy os.namepalabras clave.

Respondida el 07/05/2017 a las 00:07
fuente por usuario

votos
4

¿Qué tal una nueva respuesta:

import psutil
psutil.OSX     #True
psutil.WINDOWS #False
psutil.LINUX   #False 

Esta sería la salida si yo estaba usando OSX

Respondida el 14/08/2017 a las 14:00
fuente por usuario

votos
1

Si está ejecutando MacOS X y ejecutar platform.system()a obtener Darwin porque MacOS X está construido sobre Darwin OS de Apple. Darwin es el núcleo de MacOS X y es esencialmente MacOS X sin la interfaz gráfica de usuario.

Respondida el 13/01/2018 a las 18:29
fuente por usuario

votos
0

¿Qué tal una implementación simple enumeración como la siguiente? No hay necesidad de bibliotecas externa!

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 se puede acceder con valor de enumeración

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

PS Es python3

Respondida el 27/09/2018 a las 17:39
fuente por usuario

votos
1

Esta solución funciona tanto para pythone 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>" 

Utilice la siguiente manera:

import os_identify

print "My OS: " + os_identify.name()
Respondida el 29/01/2019 a las 13:06
fuente por usuario

votos
2
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())
Respondida el 03/02/2019 a las 22:43
fuente por usuario

votos
1

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

Una de las razones más comunes que la gente quiere comprobar su sistema operativo es para la compatibilidad de terminales y si ciertos comandos del sistema están disponibles. Desafortunadamente, el éxito de esta comprobación es algo dependiente de la instalación de Python y OS. Por ejemplo, unameno está disponible en la mayoría de los paquetes de Python Windows. El programa pitón anterior le mostrará la salida de las funciones integradas de uso más común, que ya han prestado os, sys, platform, site.

introducir descripción de la imagen aquí

Así que la mejor manera de obtener sólo el código esencial está mirando que como un ejemplo. (Supongo que podría haber acaba de pegar aquí, pero eso no habría sido políticamente correcto).

Respondida el 07/02/2019 a las 21:10
fuente por usuario

votos
3

Empecé un poco más lista sistemática de los valores que se puede esperar que el uso de los diferentes módulos (no dude en modificar y añadir 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', '')
  • tratado con archlinux y menta, consiguió mismos resultados
  • en python2 sys.platformes el sufijo versión del kernel, por ejemplo linux2, todo lo demás se mantiene igual
  • misma salida en el subsistema de Windows para Linux (probado con Ubuntu 18.04 LTS), excepto platform.architecture() = ('64bit', 'ELF')

Ventanas (64 bits)

(Con columna de 32 bits que se ejecuta 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éntica a `sysconfig.get_platform
  • anaconda en las ventanas es el mismo que el instalador oficial de ventanas pitón
  • Yo no tengo un Mac, ni un verdadero sistema de 32 bits y no estaba motivado para hacerlo en línea

Para comparar con el sistema, sólo tiene que ejecutar esta secuencia de comandos (y por favor anexe 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())
Respondida el 23/02/2019 a las 02:39
fuente por usuario

votos
0

Estoy tarde para el juego, pero, por si alguien lo necesita, esta función que utilizo para hacer ajustes en mi código para que se ejecuta 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'
Respondida el 22/05/2019 a las 16:32
fuente por usuario

votos
0

Hay 3 maneras de conseguir OS en Python, cada uno con su propio pro y contras:

Método 1

>>> import sys
>>> sys.platform
'win32'  # could be 'linux', 'linux2, 'darwin', 'freebsd8' etc

¿Cómo funciona esto ( fuente ): Internamente se llama OS API para obtener el nombre del sistema operativo como se define por el OS. Obviamente, esto puede cambiar de una versión a otra, por lo que es mejor no usar directamente. Ver aquí para varios valores específicos de OS.

método 2

>>> import os
>>> os.name
'nt'  # for Linux and Mac it prints 'posix'

¿Cómo funciona esto ( fuente ): Internamente se comprueba si tiene pitón módulos específicos de OS llamadas POSIX o nt. Si usted quiere importar estos módulos y llamar a métodos en él, esto funciona muy bien. Tenga en cuenta que no hay diferenciación entre Linux o OSX.

método 3

>>> import platform
>>> platform.system()
'Windows' # for Linux it prints 'Linux', Mac it prints `'Darwin'

¿Cómo funciona esto ( fuente ): internamente con el tiempo se llame a las API de OS internos, obtener OS nombre específico de la versión como 'Win32' o 'Win16' o 'linux1' y luego normalizar a los nombres más genéricos como 'Windows' o 'Linux' o 'Darwin' mediante la aplicación de varias heurísticas. Esta es la mejor manera portátil para obtener el nombre del sistema operativo normalizado.

Resumen

  • Si desea comprobar si sistema operativo es Windows o Linux o OSX entonces la forma más fiable es platform.system().
  • Si desea realizar llamadas específicas del OS pero a través de módulos de Python incorporados posixo ntdespués utilice os.name.
  • Si desea obtener el nombre del sistema operativo prima suministrada por sistema operativo en sí luego usar sys.platform.
Respondida el 24/09/2019 a las 02:28
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more