Domanda

Cosa devo controllare per vedere se utilizzo Windows o Unix, ecc.?

È stato utile?

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.

enter image description here

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'
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top