2008-08-05 20 views

Respuesta

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

La salida de platform.system() es el siguiente:

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

Ver:

+11

¿Por qué debería preferir 'platform' a' sys.platform'? – matth

+5

@matth Salida un poco más consistente. es decir, 'platform.system()' devuelve '" Windows "' en lugar de '" win32 "'. 'sys.platform' también contiene' "linux2" 'en versiones anteriores de Python, mientras que contiene' 'linux' 'en las más recientes. 'platform.system()' siempre ha devuelto '' Linux '. – erb

+0

En mac os X, platform.system() siempre devuelve "Darwin"? o hay otro caso posible? –

141

Dang - Me lbrandy ganó de mano, pero eso no quiere decir que no puedo proporcionarle 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 de publicar uno para Windows 10 todavía:

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

Windows 7: 'platform.release()' ''7'' – Hugo

+3

Así que, sí, acabo de ejecutar' platform.release() 'en mi * Windows * * 10 *, y definitivamente me acaba de dar'' 8 ' '. Quizás instalé Python antes de actualizar, ¿pero realmente? – Codesmith

+0

Hubiera pensado que era más probable que se haya actualizado desde Windows 8 (si se trata de una instalación limpia) y lo que Python busque en el registro o lo que quede atrás? – OJFord

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

Puede también utilizar sys.platform si ya ha importado sys y no desea importar otro módulo

>>> import sys 
>>> sys.platform 
'linux2' 
+0

¿Alguno de los enfoques tiene alguna ventaja, además de tener que importar otro módulo o no? – matth

+0

El alcance es la principal ventaja. Desea la menor cantidad posible de nombres de variables globales. Cuando ya tiene "sys" como nombre global, no debe agregar otro. Pero si aún no usa "sys", usar "_platform" podría ser más descriptivo y menos probable que colisione con otro significado. – sanderd17

17

hago esto

import sys 
print sys.platform 

Docs aquí: sys.platform.

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

10

estoy usando 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 (issue with os.system() on windows 2003 with jdk1.5) (que no puedo hacerlo, 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() 
9
>>> import platform 
>>> platform.system() 
5

en la misma línea ....

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

Esto es problemático si está en una Mac ya que platform.system() devuelve "Darwin" en una Mac y "Darwin" .lower(). Find ("win") = 3. – mishaF

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) 
+2

Bienvenido en SO, aquí, es una buena práctica para explicar por qué usar su solución y no solo cómo. Eso hará que su respuesta sea más valiosa y ayudará al lector a tener una mejor comprensión de cómo lo hace. También sugiero que eche un vistazo a nuestras preguntas frecuentes: http://stackoverflow.com/faq. – ForceMagic

+0

Buena respuesta, tal vez incluso a la par con la respuesta original. Pero podrías explicar por qué. – vgoff

8

Para Jython la única manera de obtener el nombre os he encontrado es comprobar os.name propiedad Java (tratado 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 
24

Si desea que los datos legibles por el usuario, pero todavía detallada, puede utilizar platform.platform()

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

He aquí algunas 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 script ejecutadas en algunos sistemas diferentes están disponibles aquí: https://github.com/hpcugent/easybuild/wiki/OS_flavor_name_version

6

resultados interesantes en Windows 8:

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

Editar: Esa es una bug

5

Si no buscar 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 solo funcionará si está ejecutando esto en Linux. Si desea tener más secuencias de comandos genéricas en todas las plataformas, puede mezclar esto con las muestras de código proporcionadas en otras respuestas.

69

Código de ejemplo para diferenciar sistemas operativos utilizando 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 
+1

¿Este código de ejemplo proviene de algún módulo de Python? Esta es la única respuesta que, de hecho, responde la pregunta. –

+4

Para obtener resultados más borrosos, '' _platform.startswith ('Linux') –

+1

respuesta original como se ve aquí http://stackoverflow.com/a/8220141/3286832 – Yannis

3

Comprobar 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 
4

intente esto:

import os 

os.uname() 

y usted puede hacerlo:

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

os.uname() ya no funciona a partir de Python 3.5. También –

+1

'os.uname()' no está disponible en Windows: https://docs.python.org/2/library/os.html#os.uname _Availability:. ** recientes versiones de Unix ** _ – ccpizza

6

Ten 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 
-4

Para completar, la variable de entorno "OS" parece estar definida en todas partes. En Windows XP/7/8/10 está configurado en "Windows NT". En Linux SuSE SP2 está configurado a "x86-64 linux sles11 [2]". No tengo acceso a máquinas OS-X o BSD, sería interesante verificar también allí.

import os 

os_name = os.getenv("OS") 
if os_name == "Windows_NT": 
    # Windows 
elif "linux" in os_name: 
    # Linux 
elif ... 
3

También puede usar solo el módulo de plataforma sin importar el 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] 

que 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 falta por lo general es la versión del sistema operativo pero debes saber si estás ejecutando windows, linux o mac de una manera indipendent 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] 
1

Utilice las palabras clave import os y os.name.

2

¿Qué tal una nueva respuesta:

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

Ésta sería la salida si yo estaba usando OSX

+2

Probablemente la más elegante de todas las respuestas – jsphpl

0

Si está ejecutando MacOS X y ejecutar platform.system() se obtiene Darwin porque MacOS X se basa en Sistema operativo Darwin de Apple. Darwin es el kernel de macOS X y es esencialmente macOS X sin la GUI.

Cuestiones relacionadas