Python: Quale sistema operativo sto correndo su?

voti
410

Di cosa ho bisogno di guardare per vedere se sono in Windows, Unix, ecc?

È pubblicato 05/08/2008 alle 04:23
fonte dall'utente
In altre lingue...                            


29 risposte

voti
513

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

L'uscita di platform.system()è il seguente:

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

Vedere: la piattaforma - L'accesso ai dati identificativi della piattaforma sottostante

Risposto il 05/08/2008 a 04:27
fonte dall'utente

voti
146

Dang - lbrandy mi ha battuto al punzone, ma questo non significa che io non posso fornire i risultati di sistema per Vista!

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

... e non riesco ancora a credere a quello registrato di nessuno per Windows 10:

>>> import os
>>> os.name
'nt'
>>> import platform
>>> platform.system()
'Windows'
>>> platform.release()
'10'
Risposto il 05/08/2008 a 04:57
fonte dall'utente

voti
108

Per la cronaca ecco i risultati sul Mac:

>>> import os
>>> os.name
'posix'
>>> import platform
>>> platform.system()
'Darwin'
>>> platform.release()
'8.11.1'
Risposto il 05/08/2008 a 05:13
fonte dall'utente

voti
35

È inoltre possibile utilizzare sys.platform se avete già importato sys e non si vuole importare un altro modulo

>>> import sys
>>> sys.platform
'linux2'
Risposto il 26/08/2008 a 16:41
fonte dall'utente

voti
17

lo faccio

import sys
print sys.platform

Documenti qui: sys.platform .

Tutto ciò che serve è probabilmente nel modulo sys.

Risposto il 16/02/2009 a 15:43
fonte dall'utente

voti
10

Sto usando lo strumento WLST che viene fornito con weblogic, e non implementa il pacchetto 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 l'applicazione di patch del sistema javaos.py ( edizione con os.system () su Windows 2003 con jdk1.5 ) (che non posso fare, devo usare weblogic out of the box), questo è quello che uso:

def iswindows():
  os = java.lang.System.getProperty( "os.name" )
  return "win" in os.lower()
Risposto il 11/06/2010 a 08:37
fonte dall'utente

voti
9
>>> import platform
>>> platform.system()
Risposto il 25/06/2011 a 12:10
fonte dall'utente

voti
5

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")
Risposto il 28/09/2011 a 18:54
fonte dall'utente

voti
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)
Risposto il 10/10/2011 a 01:11
fonte dall'utente

voti
8

Per Jython l'unico modo per ottenere il nome del sistema operativo che ho trovato è quello di verificare os.nameproprietà Java (provato con sys, ose platformmoduli 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
Risposto il 09/01/2013 a 09:47
fonte dall'utente

voti
24

Se si desidera che i dati utente leggibile ma ancora dettagliato, è possibile utilizzare platform.platform ()

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

Ecco un paio di telefonate diverse possibili che si possono fare per individuare dove sei

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(),
))

Le uscite di questo script correvano su alcuni sistemi differenti è disponibile qui: https://github.com/hpcugent/easybuild/wiki/OS_flavor_name_version

Risposto il 23/01/2013 a 11:55
fonte dall'utente

voti
6

Risultati interessanti su Windows 8:

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

Edit: Questo è un bug

Risposto il 14/02/2013 a 23:44
fonte dall'utente

voti
5

Se non cercando la versione del kernel, ecc, ma cercando la distribuzione Linux si consiglia di utilizzare il seguente

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, questo funziona solo se si esegue questo su Linux. Se si desidera avere più script generico attraverso le piattaforme, si può mescolare questo con esempi di codice riportati in altre risposte.

Risposto il 28/03/2013 a 06:19
fonte dall'utente

voti
73

codice di esempio per differenziare usando python di sistema operativo:

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
Risposto il 16/09/2014 a 08:42
fonte dall'utente

voti
3

Controllare le prove disponibili con la piattaforma del modulo e stampare la risposta per il vostro 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
Risposto il 30/10/2014 a 00:43
fonte dall'utente

voti
5

prova questo:

import os

os.uname()

e si può fare:

info=os.uname()
info[0]
info[1]
Risposto il 16/01/2015 a 18:13
fonte dall'utente

voti
6

Attenzione, se siete su Windows con Cygwin dove os.nameè posix.

>>> import os, platform
>>> print os.name
posix
>>> print platform.system()
CYGWIN_NT-6.3-WOW
Risposto il 08/07/2015 a 14:46
fonte dall'utente

voti
-4

Solo per completezza, variabile d'ambiente "OS" sembra essere definito in tutto il mondo. Su Windows XP / 7/8/10 è impostato su "Windows_NT". Su Linux SuSE SP2 è impostato su "Linux x86-64 SLES11 [2]". Non ho accesso alle macchine OS-X o BSD, sarebbe interessante verificare anche lì.

import os

os_name = os.getenv("OS")
if os_name == "Windows_NT":
    # Windows
elif "linux" in os_name:
    # Linux
elif ...
Risposto il 01/12/2015 a 07:28
fonte dall'utente

voti
3

È inoltre possibile utilizzare solo Platform Module senza importare modulo os 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 bella e ordinata per la segnalazione di scopo può essere raggiunto utilizzando questa linea:

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

Che 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 si dovrebbe sapere se si esegue Windows, Linux o Mac un modo indipendente della piattaforma è quello di utilizzare questo test:

In []: for i in [platform.linux_distribution(),platform.mac_ver(),platform.win32_ver()]:
   ....:     if i[0]:
   ....:         print 'Version: ',i[0]
Risposto il 20/08/2016 a 08:03
fonte dall'utente

voti
1

Utilizzare la import ose os.nameparole chiave.

Risposto il 07/05/2017 a 03:07
fonte dall'utente

voti
4

Che ne dite di una nuova risposta:

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

Questo sarebbe l'uscita se stavo usando OSX

Risposto il 14/08/2017 a 17:00
fonte dall'utente

voti
1

Se si esegue MacOS X ed eseguire platform.system()si ottiene Darwin perché MacOS X è costruito su Darwin OS di Apple. Darwin è il kernel di MacOS X ed è essenzialmente MacOS X senza l'interfaccia grafica.

Risposto il 13/01/2018 a 21:29
fonte dall'utente

voti
0

Che ne dite 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

Semplicemente si può accedere con un valore Enum

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

PS È python3

Risposto il 27/09/2018 a 17:39
fonte dall'utente

voti
1

Questa soluzione funziona per entrambi pythone jython.

Modulo 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>" 

Utilizzare in questo modo:

import os_identify

print "My OS: " + os_identify.name()
Risposto il 29/01/2019 a 13:06
fonte dall'utente

voti
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())
Risposto il 03/02/2019 a 22:43
fonte dall'utente

voti
1

Potete guardare il codice pyOSinfo, che fa parte del pip-data di pacchetto, per ottenere le informazioni di sistema operativo più rilevanti, come si è visto dalla vostra distribuzione Python.

Uno dei motivi più comuni che vogliono controllare il loro sistema operativo è per la compatibilità del terminale e se alcuni comandi di sistema sono disponibili. Purtroppo, il successo di questo controllo è un po 'dipende dalla vostra installazione di Python e OS. Ad esempio, unamenon è disponibile sulla maggior parte dei pacchetti python di Windows. Il programma Python sopra vi mostrerà l'uscita delle funzioni built-in più comunemente utilizzati, già fornito da os, sys, platform, site.

entrare descrizione dell'immagine qui

Quindi il modo migliore per ottenere solo il codice essenziale sta guardando che come esempio. (Credo che avrei potuto appena incollato qui, ma che non sarebbe stato politicamente corretto.)

Risposto il 07/02/2019 a 21:10
fonte dall'utente

voti
3

Ho iniziato un po 'più elenco sistematico di quali valori si può aspettare utilizzando i vari moduli (sentitevi liberi di modificare e aggiungere il vostro sistema):

Linux (64bit) + 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 menta, ha ottenuto gli stessi risultati
  • su python2 sys.platformè suffisso versione del kernel, per esempio linux2, tutto il resto rimane identico
  • stessa uscita su Windows Subsystem for Linux (provato con Ubuntu 18.04 LTS), ad eccezione platform.architecture() = ('64bit', 'ELF')

WINDOWS (64bit)

(Con la 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 è lo stesso come installer ufficiale finestre pitone
  • Non ho un Mac, né un vero sistema a 32 bit e non hanno spinto a farlo online

Per confrontare con il sistema, è sufficiente eseguire questo script (e per favore accodare i risultati qui se manca :)

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())
Risposto il 23/02/2019 a 02:39
fonte dall'utente

voti
0

Sono in ritardo al gioco, ma, nel caso in cui nessuno ha bisogno, questa una funzione che utilizzo per fare le regolazioni sul mio codice in modo che gira 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'
Risposto il 22/05/2019 a 16:32
fonte dall'utente

voti
0

Ci sono 3 modi per ottenere OS in Python, ognuna con il proprio pro e contro:

metodo 1

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

Come funziona ( fonte ): Internamente chiama OS API per ottenere il nome del sistema operativo, come definito dal sistema operativo. Questo può ovviamente cambiare da versione a versione, quindi è meglio non usare direttamente. Vedi qui per diversi valori specifici del sistema operativo.

metodo 2

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

Come funziona ( fonte ): Internamente controlla se Python ha moduli specifici del sistema operativo chiamato posix o nt. Se si desidera importare questi moduli e le modalità di chiamata su di esso, questo funziona alla grande. Si noti che non v'è alcuna differenziazione tra Linux o OSX.

metodo 3

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

Come funziona ( fonte ): Internamente finirà per chiamare le API interne del sistema operativo, ottenere OS nome specifiche della versione come 'Win32' o 'Win16' o 'linux1' e quindi normalizzare a nomi più generico come 'Windows' o 'Linux' o 'Darwin' mediante l'applicazione di diverse euristiche. Questo è il modo migliore per ottenere portatile normalizzata nome del sistema operativo.

Sommario

  • Se si vuole verificare se sistema operativo è Windows o Linux o OSX allora il modo più affidabile è platform.system().
  • Se si desidera effettuare chiamate specifiche del sistema operativo, ma tramite moduli Python built-in posixo ntpoi usare os.name.
  • Se si desidera ottenere il nome del sistema operativo crudo come fornita dal sistema operativo stesso quindi utilizzare sys.platform.
Risposto il 24/09/2019 a 02:28
fonte dall'utente

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