Python: Hva OS kjører jeg på?

stemmer
426

Hva trenger jeg for å se på for å se om jeg er på Windows, Unix, etc?

Publisert på 05/08/2008 klokken 03:23
kilden bruker
På andre språk...                            


29 svar

stemmer
543

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

Utgangen av platform.system()er som følger:

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

Se: plattform - Tilgang til underliggende plattform identifiserende data

Svarte 05/08/2008 kl. 03:27
kilden bruker

stemmer
152

Dang - lbrandy slå meg til punch, men det betyr ikke at jeg ikke kan gi deg system resultater for Vista!

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

... og jeg kan ikke tro at ingen bokførte en for Windows 10 ennå:

>>> import os
>>> os.name
'nt'
>>> import platform
>>> platform.system()
'Windows'
>>> platform.release()
'10'
Svarte 05/08/2008 kl. 03:57
kilden bruker

stemmer
109

For posten her er resultatet på Mac:

>>> import os
>>> os.name
'posix'
>>> import platform
>>> platform.system()
'Darwin'
>>> platform.release()
'8.11.1'
Svarte 05/08/2008 kl. 04:13
kilden bruker

stemmer
75

Eksempelkode for å skille OS er å bruke 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
Svarte 16/09/2014 kl. 07:42
kilden bruker

stemmer
36

Du kan også bruke sys.platform hvis du allerede har importert sys og du ikke vil importere en annen modul

>>> import sys
>>> sys.platform
'linux2'
Svarte 26/08/2008 kl. 15:41
kilden bruker

stemmer
25

Hvis du vil ha bruker lesbar data, men likevel detaljert, kan du bruke platform.platform ()

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

Her er noen forskjellige mulige samtaler du kan gjøre for å identifisere hvor du er

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

Utgangene av dette skriptet kjørte på noen forskjellige systemer er tilgjengelig her: https://github.com/hpcugent/easybuild/wiki/OS_flavor_name_version

Svarte 23/01/2013 kl. 10:55
kilden bruker

stemmer
18

jeg gjør dette

import sys
print sys.platform

Dokumenter her: sys.platform .

Alt du trenger er sannsynligvis i sys-modulen.

Svarte 16/02/2009 kl. 14:43
kilden bruker

stemmer
11

Jeg bruker WLST verktøyet som følger med WebLogic, og det trenger ikke implementere plattformen pakken.

wls:/offline> import os
wls:/offline> print os.name
java 
wls:/offline> import sys
wls:/offline> print sys.platform
'java1.5.0_11'

Bortsett fra patching systemet javaos.py ( problemet med os.system () på Windows 2003 med jdk1.5 ) (som jeg ikke kan gjøre, må jeg bruke WebLogic ut av boksen), dette er hva jeg bruker:

def iswindows():
  os = java.lang.System.getProperty( "os.name" )
  return "win" in os.lower()
Svarte 11/06/2010 kl. 07:37
kilden bruker

stemmer
9
>>> import platform
>>> platform.system()
Svarte 25/06/2011 kl. 11:10
kilden bruker

stemmer
8

For Jython den eneste måten å få os navn jeg fant er å sjekke os.nameJava eiendom (prøvd med sys, osog platformmoduler for Jython 2.5.3 på 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
Svarte 09/01/2013 kl. 08:47
kilden bruker

stemmer
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)
Svarte 10/10/2011 kl. 00:11
kilden bruker

stemmer
6

Se opp hvis du er på Windows med Cygwin der os.nameer posix.

>>> import os, platform
>>> print os.name
posix
>>> print platform.system()
CYGWIN_NT-6.3-WOW
Svarte 08/07/2015 kl. 14:46
kilden bruker

stemmer
6

Interessante resultater på Windows 8:

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

Edit: Det er en bug

Svarte 14/02/2013 kl. 22:44
kilden bruker

stemmer
5

Hva med et nytt svar:

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

Dette ville være resultatet hvis jeg bruker OSX

Svarte 14/08/2017 kl. 17:00
kilden bruker

stemmer
5

Prøv dette:

import os

os.uname()

og du kan gjøre det:

info=os.uname()
info[0]
info[1]
Svarte 16/01/2015 kl. 18:13
kilden bruker

stemmer
5

Hvis du ikke ser for kjernen versjonen etc, men ser for linux distribusjon kan være lurt å bruke følgende

i 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

i python2.4

>>> import platform
>>> print platform.dist()
('centos', '6.0', 'Final')
>>> print platform.dist()[0]
centos
>>> print platform.dist()[1]
6.0

Selvfølgelig vil dette fungerer bare hvis du kjører dette på linux. Hvis du vil ha mer generell skript på tvers av plattformer, kan du blande dette med kodeeksempler gitt i andre svar.

Svarte 28/03/2013 kl. 05:19
kilden bruker

stemmer
5

i samme stemning ....

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")
Svarte 28/09/2011 kl. 17:54
kilden bruker

stemmer
4

Du kan også bruke bare platform module uten å importere os-modulen for å få all informasjon.

>>> 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')

En fin og ryddig layout for rapportering formål kan oppnås ved hjelp av denne linjen:

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

Det gir denne produksjonen:

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

Hva mangler vanligvis er den versjonen av operativsystemet, men du bør vite hvis du kjører Windows, Linux eller Mac en plattform uavhengig måte er å bruke denne testen:

In []: for i in [platform.linux_distribution(),platform.mac_ver(),platform.win32_ver()]:
   ....:     if i[0]:
   ....:         print 'Version: ',i[0]
Svarte 20/08/2016 kl. 08:03
kilden bruker

stemmer
4

Sjekk de tilgjengelige tester med modul plattform og skrive svaret ut for systemet ditt:

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
Svarte 30/10/2014 kl. 00:43
kilden bruker

stemmer
3

Jeg startet litt mer systematisk oversikt over hvilke verdier du kan forvente å bruke de ulike modulene (gjerne endre og legge til systemet ditt):

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', '')
  • prøvde med Arch Linux og mynte, fikk samme resultat
  • på python2 sys.platformer suffikset av kernel versjon, for eksempel linux2, alt annet forblir identiske
  • samme utgang på Windows Subsystem for Linux (prøvd med ubuntu 18.04 LTS), unntatt platform.architecture() = ('64bit', 'ELF')

WINDOWS (64 bit)

(Med 32-biters kolonne kjører i den 32-biters delsystemet)

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')

Noen kommentarer:

  • Det er også distutils.util.get_platform()noe som er identisk med `sysconfig.get_platform
  • anakonda på vinduer er samme som offisiell python Windows Installer
  • Jeg har ikke en Mac eller en sann 32bit system og var ikke motivert til å gjøre det på nettet

For å sammenligne med systemet, er det bare å kjøre dette skriptet (og kan legge resultatene her hvis mangler :)

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())
Svarte 23/02/2019 kl. 02:39
kilden bruker

stemmer
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())
Svarte 03/02/2019 kl. 22:43
kilden bruker

stemmer
1

Du kan se på koden i pyOSinfosom er en del av pip-date -pakken, for å få den mest relevante OS informasjon, sett fra Python distribusjon.

En av de vanligste grunnene til at folk ønsker å sjekke deres OS er for terminal kompatibilitet og dersom visse systemkommandoer er tilgjengelige. Dessverre lykkes med denne kontrollen er noe avhengig av din python installasjon og OS. For eksempel, unameer ikke tilgjengelig på de fleste Windows python pakker. Ovennevnte python-programmet vil vise deg resultatet av de mest brukte innebygde funksjoner, som allerede er levert av os, sys, platform, site.

skriv bildebeskrivelse her

Så den beste måten å få bare de essensielle koden er å se på det som et eksempel. (Jeg tror jeg kunne ha limt den her, men det ville ikke vært politisk korrekt.)

Svarte 07/02/2019 kl. 21:10
kilden bruker

stemmer
1

Denne løsningen fungerer for både pythonog jython.

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

Bruk som dette:

import os_identify

print "My OS: " + os_identify.name()
Svarte 29/01/2019 kl. 13:06
kilden bruker

stemmer
1

Hvis du kjører MacOS X og kjøre platform.system()får du darwin fordi MacOS X er bygget på Apples Darwin OS. Darwin er kjernen av MacOS X, og er egentlig MacOS X uten GUI.

Svarte 13/01/2018 kl. 21:29
kilden bruker

stemmer
1

Bruk import osog os.namesøkeord.

Svarte 07/05/2017 kl. 03:07
kilden bruker

stemmer
0

Det er 3 måter å få OS i Python, hver med sin egen pro og ulemper:

metode 1

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

Hvordan dette fungerer ( kilde ): Internt kaller OS APIer for å få navnet på OS som definert av OS. Dette kan selvsagt endre seg fra versjon til versjon, så best å ikke bruke direkte. Se her for en rekke OS-spesifikke verdier.

metode 2

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

Hvordan dette fungerer ( kilde ): Internt sjekker om python har OS-spesifikke moduler kalt POSIX eller nt. Hvis du ønsker å importere disse modulene og kalle metoder på den, fungerer dette bra. Merk at det er ingen forskjell mellom Linux eller OSX.

metode 3

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

Hvordan dette fungerer ( kilde ): Internt vil det til slutt ringe interne OS APIer, får OS versjon spesifikt navn som 'win32' eller 'Win16' eller 'linux1' og deretter normalisere til mer generiske navn som 'Windows' eller 'Linux' eller 'Darwin' ved å bruke flere heuristikker. Dette er den beste bærbare måten å få normalisert OS navn.

Sammendrag

  • Hvis du ønsker å sjekke om OS er Windows eller Linux eller OSX da den mest pålitelige måten er platform.system().
  • Hvis du ønsker å gjøre OS-spesifikke samtaler, men via innebygd Python moduler posixeller ntså bruke os.name.
  • Hvis du ønsker å få rå OS navn som leveres av OS selv da bruke sys.platform.
Svarte 24/09/2019 kl. 02:28
kilden bruker

stemmer
0

Jeg er sent til spillet, men bare i tilfelle noen trenger det, er dette en funksjon jeg bruker å gjøre justeringer på koden min slik at den kjører på Windows, Linux og 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'
Svarte 22/05/2019 kl. 16:32
kilden bruker

stemmer
0

Hva med en enkel Enum gjennomføring som følgende? Ingen behov for ekstern libs!

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

Bare du kan få tilgang til med Enum verdi

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

PS Det er python3

Svarte 27/09/2018 kl. 17:39
kilden bruker

stemmer
-4

Bare for fullstendighet, "OS" miljøvariabelen synes å være definert overalt. På Windows XP / 7/8/10 er satt til "Windows_NT". På Linux SuSE SP2 er den satt til "x86-64 linux sles11 [2]". Jeg har ikke tilgang til OS-X eller BSD maskiner, ville være interessant å sjekke der også.

import os

os_name = os.getenv("OS")
if os_name == "Windows_NT":
    # Windows
elif "linux" in os_name:
    # Linux
elif ...
Svarte 01/12/2015 kl. 07:28
kilden bruker

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