Pitone:Su quale sistema operativo sto utilizzando?
-
08-06-2019 - |
Domanda
Cosa devo controllare per vedere se utilizzo Windows o Unix, ecc.?
Soluzione
>>> import os
>>> print os.name
posix
>>> import platform
>>> platform.system()
'Linux'
>>> platform.release()
'2.6.22-15-generic'
L'uscita di platform.system()
è come segue:
- Linux:
Linux
- Mac:
Darwin
- Finestre:
Windows
Vedere: piattaforma: accesso ai dati identificativi della piattaforma sottostante
Altri suggerimenti
Cavolo, lbrandy mi ha battuto sul tempo, ma ciò non significa che non posso fornirti i risultati del sistema per Vista!
>>> import os
>>> os.name
'nt'
>>> import platform
>>> platform.system()
'Windows'
>>> platform.release()
'Vista'
...e non posso credere che nessuno ne abbia ancora pubblicato uno per Windows 10:
>>> import os
>>> os.name
'nt'
>>> import platform
>>> platform.system()
'Windows'
>>> platform.release()
'10'
Per la cronaca ecco i risultati su Mac:
>>> import os
>>> os.name
'posix'
>>> import platform
>>> platform.system()
'Darwin'
>>> platform.release()
'8.11.1'
Codice di esempio per differenziare i sistemi operativi che utilizzano 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
Puoi anche usare sys.platform se hai già importato sys e non vuoi importare un altro modulo
>>> import sys
>>> sys.platform
'linux2'
Se desideri dati leggibili dall'utente ma comunque dettagliati, puoi utilizzare piattaforma.piattaforma()
>>> import platform
>>> platform.platform()
'Linux-3.3.0-8.fc16.x86_64-x86_64-with-fedora-16-Verne'
Ecco alcune diverse chiamate possibili che puoi effettuare per identificare dove ti trovi
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(),
))
Gli output di questo script sono stati eseguiti su alcuni sistemi diversi (Linux, Windows, Solaris, MacOS) e architetture (x86, x64, Itanium, power pc, sparc) sono disponibili qui: https://github.com/hpcugent/easybuild/wiki/OS_flavor_name_version
Il server Ubuntu 12.04, ad esempio, fornisce:
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: ('', ('', '', ''), '')
lo faccio
import sys
print sys.platform
Documenti qui: sys.platform.
Tutto ciò di cui hai bisogno è probabilmente nel modulo sys.
Sto utilizzando lo strumento WLST fornito con weblogic e non implementa il pacchetto della piattaforma.
wls:/offline> import os
wls:/offline> print os.name
java
wls:/offline> import sys
wls:/offline> print sys.platform
'java1.5.0_11'
A parte patchare il sistema javaos.py (problema con os.system() su Windows 2003 con jdk1.5) (cosa che non posso fare, devo usare weblogic fuori dagli schemi), questo è quello che uso:
def iswindows():
os = java.lang.System.getProperty( "os.name" )
return "win" in os.lower()
Che ne dici di una nuova risposta:
import psutil
psutil.MACOS #True (OSX is deprecated)
psutil.WINDOWS #False
psutil.LINUX #False
Questo sarebbe l'output se utilizzassi 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)
Per Jython l'unico modo per ottenere il nome del sistema operativo che ho trovato è controllare os.name
Proprietà Java (provato con sys
, os
E platform
moduli per Jython 2.5.3 su 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
Ho iniziato un elenco un po' più sistematico dei valori che puoi aspettarti utilizzando i vari moduli (sentiti libero di modificare e aggiungere il tuo sistema):
Linux (64 bit) + WSL
os.name posix
sys.platform linux
platform.system() Linux
sysconfig.get_platform() linux-x86_64
platform.machine() x86_64
platform.architecture() ('64bit', '')
- provato con archlinux e mint, ho ottenuto gli stessi risultati
- su Python2
sys.platform
ha il suffisso della versione del kernel, ad es.linux2
, tutto il resto rimane identico - stesso output sul sottosistema Windows per Linux (provato con Ubuntu 18.04 LTS), tranne
platform.architecture() = ('64bit', 'ELF')
WINDOWS (64 bit)
(con colonna a 32 bit in esecuzione nel sottosistema a 32 bit)
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')
Alcune osservazioni:
- c'è anche
distutils.util.get_platform()
che è identico a `sysconfig.get_platform - anaconda su Windows è uguale al programma di installazione ufficiale di Python per Windows
- Non ho un Mac né un vero sistema a 32 bit e non ero motivato a farlo online
Per effettuare un confronto con il tuo sistema, esegui semplicemente questo script (e aggiungi i risultati qui se mancanti :)
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())
Risultati interessanti su Windows 8:
>>> import os
>>> os.name
'nt'
>>> import platform
>>> platform.system()
'Windows'
>>> platform.release()
'post2008Server'
Modificare: È un insetto
Fai attenzione se sei su Windows con Cygwin dove os.name
È posix
.
>>> import os, platform
>>> print os.name
posix
>>> print platform.system()
CYGWIN_NT-6.3-WOW
nella stessa 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")
Se non stai cercando la versione del kernel, ecc., ma stai cercando la distribuzione Linux, potresti utilizzare quanto segue
in 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
in Python2.4
>>> import platform
>>> print platform.dist()
('centos', '6.0', 'Final')
>>> print platform.dist()[0]
centos
>>> print platform.dist()[1]
6.0
Ovviamente, funzionerà solo se lo stai eseguendo su Linux.Se desideri avere uno script più generico su tutte le piattaforme, puoi mescolarlo con esempi di codice forniti in altre risposte.
prova questo:
import os
os.uname()
e puoi farlo:
info=os.uname()
info[0]
info[1]
Controlla i test disponibili con la piattaforma dei moduli e stampa la risposta per il tuo 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
Puoi anche utilizzare solo il modulo della piattaforma senza importare il modulo del sistema operativo per ottenere tutte le informazioni.
>>> 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 layout gradevole e ordinato a scopo di reporting può essere ottenuto utilizzando questa riga:
for i in zip(['system','node','release','version','machine','processor'],platform.uname()):print i[0],':',i[1]
Ciò dà questo output:
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
Ciò che manca di solito è la versione del sistema operativo, ma dovresti sapere se stai utilizzando Windows, Linux o Mac, un modo indipendente dalla piattaforma è utilizzare questo test:
In []: for i in [platform.linux_distribution(),platform.mac_ver(),platform.win32_ver()]:
....: if i[0]:
....: print 'Version: ',i[0]
Se utilizzi macOS X ed esegui platform.system()
Ottieni Darwin perché MacOS X è costruito sul sistema operativo Darwin di Apple.Darwin è il kernel di macOS X ed è essenzialmente macOS X senza GUI.
Questa soluzione funziona per entrambi python
E jython
.
modulo os_identifica.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>"
Utilizzare in questo modo:
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())
Usa il import os
E os.name
parole chiave.
Che ne dici di una semplice implementazione Enum come la seguente?Non c'è bisogno di librerie esterne!
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
Puoi semplicemente accedere con il valore Enum
if OS.LINUX.value:
print("Cool it is Linux")
PS È Python3
Puoi guardare il codice in pyOSinfo
che fa parte del pip-data pacchetto, per ottenere le informazioni sul sistema operativo più rilevanti, come visto dalla tua distribuzione Python.
Uno dei motivi più comuni per cui le persone desiderano verificare il proprio sistema operativo è la compatibilità del terminale e la disponibilità di determinati comandi di sistema.Sfortunatamente, il successo di questo controllo dipende in qualche modo dall'installazione di Python e dal sistema operativo.Per esempio, uname
non è disponibile sulla maggior parte dei pacchetti Python di Windows.Il programma Python sopra ti mostrerà l'output delle funzioni integrate più comunemente utilizzate, già fornite da os, sys, platform, site
.
Quindi il modo migliore per ottenere solo il codice essenziale è guardare Quello come esempio.(Immagino che avrei potuto semplicemente incollarlo qui, ma non sarebbe stato politicamente corretto.)
Sono in ritardo per il gioco ma, nel caso qualcuno ne abbia bisogno, questa è una funzione che utilizzo per apportare modifiche al mio codice in modo che funzioni su 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'