Pitão:Em qual sistema operacional estou executando?
-
08-06-2019 - |
Pergunta
O que preciso verificar para saber se estou no Windows ou no Unix, etc.?
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
.
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'