Pitón:¿En qué sistema operativo estoy ejecutando?
-
08-06-2019 - |
Pregunta
¿Qué necesito mirar para ver si estoy en Windows o Unix, etc.?
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
.
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'