Python: Was O leite ich auf?

stimmen
410

Was muss ich schauen, um zu sehen, ob ich auf Windows, Unix bin, etc?

Veröffentlicht am 05/08/2008 um 04:23
quelle vom benutzer
In anderen Sprachen...                            


29 antworten

stimmen
513

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

Der Ausgang der platform.system()ist wie folgt:

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

Siehe: Plattform - Zugang zu identifizierenden Daten der zugrunde liegenden Plattform

Beantwortet am 05/08/2008 um 04:27
quelle vom benutzer

stimmen
146

Dinge - lbrandy schlug mich auf den Stempel, aber das ich bedeutet nicht, nicht, dass Sie mit den Systemergebnissen für Vista zur Verfügung stellen kann!

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

... und ich kann nicht niemandes Gesendete eine für Windows 10 noch glauben:

>>> import os
>>> os.name
'nt'
>>> import platform
>>> platform.system()
'Windows'
>>> platform.release()
'10'
Beantwortet am 05/08/2008 um 04:57
quelle vom benutzer

stimmen
108

Für die Aufzeichnung ist hier die Ergebnisse auf dem Mac:

>>> import os
>>> os.name
'posix'
>>> import platform
>>> platform.system()
'Darwin'
>>> platform.release()
'8.11.1'
Beantwortet am 05/08/2008 um 05:13
quelle vom benutzer

stimmen
73

Beispielcode OS mit Python zu unterscheiden:

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
Beantwortet am 16/09/2014 um 08:42
quelle vom benutzer

stimmen
35

Sie können auch sys.platform verwenden, wenn Sie bereits sys importiert haben und Sie nicht wollen, ein weiteres Modul importieren

>>> import sys
>>> sys.platform
'linux2'
Beantwortet am 26/08/2008 um 16:41
quelle vom benutzer

stimmen
24

Wenn Sie Benutzer lesbare Daten wollen aber noch detailliert, können Sie platform.platform ()

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

Hier ein paar verschiedenen möglichen Anrufe, die Sie machen können, um festzustellen, wo Sie sind

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

Die Ausgänge dieses Skript lief auf ein paar verschiedene Systeme gibt es hier: https://github.com/hpcugent/easybuild/wiki/OS_flavor_name_version

Beantwortet am 23/01/2013 um 11:55
quelle vom benutzer

stimmen
17

Ich tue dies,

import sys
print sys.platform

Docs hier: sys.platform .

Alles, was Sie brauchen, ist wahrscheinlich in dem sys-Modul.

Beantwortet am 16/02/2009 um 15:43
quelle vom benutzer

stimmen
10

Ich bin mit dem WLST-Tool, das mit WebLogic kommt, und es ist nicht die Plattform Paket implementieren.

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

Neben Patchen des Systems javaos.py ( Ausgabe mit os.system () auf Windows 2003 mit jdk1.5 ) (was ich nicht tun kann, ich habe WebLogic verwenden aus der Box), das ist , was ich benutze:

def iswindows():
  os = java.lang.System.getProperty( "os.name" )
  return "win" in os.lower()
Beantwortet am 11/06/2010 um 08:37
quelle vom benutzer

stimmen
9
>>> import platform
>>> platform.system()
Beantwortet am 25/06/2011 um 12:10
quelle vom benutzer

stimmen
8

Für Jython der einzige Weg os Name , den ich gefunden zu bekommen , ist zu prüfen , os.nameJava - Eigenschaft (versuchte sys, osund platformModule für Jython 2.5.3 auf 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
Beantwortet am 09/01/2013 um 09:47
quelle vom benutzer

stimmen
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)
Beantwortet am 10/10/2011 um 01:11
quelle vom benutzer

stimmen
6

Achten Sie , wenn Sie unter Windows mit Cygwin sind , wo os.nameist posix.

>>> import os, platform
>>> print os.name
posix
>>> print platform.system()
CYGWIN_NT-6.3-WOW
Beantwortet am 08/07/2015 um 14:46
quelle vom benutzer

stimmen
6

Interessante Ergebnisse auf Windows 8:

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

Edit: Das ist ein Fehler

Beantwortet am 14/02/2013 um 23:44
quelle vom benutzer

stimmen
5

Versuche dies:

import os

os.uname()

und Sie können es machen:

info=os.uname()
info[0]
info[1]
Beantwortet am 16/01/2015 um 18:13
quelle vom benutzer

stimmen
5

Wenn Sie nicht für die Kernel-Version usw. suchen, aber auf der Suche für die Linux-Distribution sollten Sie die folgenden verwenden

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

Offensichtlich wird dies nur funktionieren, wenn Sie diese auf Linux laufen. Wenn Sie mehr generische Skript auf verschiedenen Plattformen haben möchten, können Sie dies mit Code-Beispielen in anderen Antworten gegeben mischen.

Beantwortet am 28/03/2013 um 06:19
quelle vom benutzer

stimmen
5

in der gleichen Ader ....

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")
Beantwortet am 28/09/2011 um 18:54
quelle vom benutzer

stimmen
4

Wie über eine neue Antwort:

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

Dies wäre der Ausgang, wenn ich OSX wurde mit

Beantwortet am 14/08/2017 um 17:00
quelle vom benutzer

stimmen
3

Ich begann ein wenig systematische Auflistung, welche Werte können Sie mit den verschiedenen Modulen (fühlen Sie sich frei zu bearbeiten und fügen Sie Ihr System) erwarten:

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', '')
  • versuchte mit archlinux und Minze, bekam gleiche Ergebnisse
  • auf python2 sys.platformvon Kernel - Version suffixed, zB linux2, bleibt alles andere gleich
  • gleiche Ausgabe auf Windows-Subsystem für Linux (versucht, mit ubuntu 18.04 LTS), mit Ausnahme platform.architecture() = ('64bit', 'ELF')

WINDOWS (64 Bit)

(Mit 32-Bit-Säule läuft in den 32-Bit-Subsystem)

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

Einige Bemerkungen:

  • gibt es auch distutils.util.get_platform(), die `sysconfig.get_platform identisch ist
  • anaconda auf Fenster ist der gleiche wie offizielle Python Windows Installer
  • Ich habe nicht einen Mac noch ein echtes 32-Bit-System und war nicht motiviere es online zu tun

So vergleichen Sie mit Ihrem System, einfach dieses Skript ausführen (und bitte Ergebnisse anhängen hier, wenn sie fehlt :)

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())
Beantwortet am 23/02/2019 um 02:39
quelle vom benutzer

stimmen
3

Sie können auch nur Plattform-Modul verwenden, ohne os-Modul zu importieren, alle Informationen zu erhalten.

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

Ein schönes und ordentlich Layout für einen bestimmten Zweck Reporting können mit dieser Zeile erreicht werden:

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

Das gibt die folgende Ausgabe:

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

Was fehlt in der Regel ist das Betriebssystem-Version, aber Sie sollten wissen, ob Sie mit Windows, Linux oder Mac eine Plattform unabhängige Art und Weise ist, diesen Test zu verwenden:

In []: for i in [platform.linux_distribution(),platform.mac_ver(),platform.win32_ver()]:
   ....:     if i[0]:
   ....:         print 'Version: ',i[0]
Beantwortet am 20/08/2016 um 08:03
quelle vom benutzer

stimmen
3

Prüfen Sie die verfügbaren Tests mit Modulplattform und drucken Sie die Antwort aus für Ihr System:

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
Beantwortet am 30/10/2014 um 00:43
quelle vom benutzer

stimmen
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())
Beantwortet am 03/02/2019 um 22:43
quelle vom benutzer

stimmen
1

Sie können den Code anschauen in pyOSinfodem einen Teil des ist Pip-date - Pakets, die wichtigsten OS Informationen zu erhalten, wie aus Ihrer Python - Distribution gesehen.

Einer der häufigsten Gründe , warum Menschen wollen ihre OS überprüfen , ist für Terminal - Kompatibilität und wenn bestimmte Systembefehle zur Verfügung stehen. Leider ist der Erfolg dieser Prüfung etwas abhängig von Ihrer Python - Installation und OS. Zum Beispiel unameist auf den meisten Windows - Python - Paketen nicht zur Verfügung. Das obige Python - Programm zeigt Ihnen die Ausgabe der am häufigsten integrierten Funktionen verwendet, die bereits zur Verfügung gestellt von os, sys, platform, site.

Geben Sie hier image description

So ist die beste Art und Weise nur der wesentliche Code zu erhalten , ist auf der Suche , dass als Beispiel. (Ich glaube , ich es gerade hier eingefügt haben können, aber das hätte nicht politisch korrekt.)

Beantwortet am 07/02/2019 um 21:10
quelle vom benutzer

stimmen
1

Diese Lösung funktioniert für beide pythonund 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>" 

Verwenden Sie wie folgt aus:

import os_identify

print "My OS: " + os_identify.name()
Beantwortet am 29/01/2019 um 13:06
quelle vom benutzer

stimmen
1

Wenn Sie MacOS X laufen und laufen platform.system()Sie bekommen Darwin weil MacOS X auf Apples Darwin OS gebaut wird. Darwin ist der Kern von macOS X und ist im Wesentlichen macOS X ohne die GUI.

Beantwortet am 13/01/2018 um 21:29
quelle vom benutzer

stimmen
1

Verwenden Sie die import osund os.nameKeywords.

Beantwortet am 07/05/2017 um 03:07
quelle vom benutzer

stimmen
0

Es gibt 3 Möglichkeiten OS in Python, die jeweils mit einer eigenen Vor- und Nachteilen zu bekommen:

Methode 1

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

Wie das funktioniert ( Quelle ): Intern ruft es OS APIs Namen des OS zu erhalten , wie von OS definiert. Dies kann natürlich von Version zu Version ändern, also am besten nicht direkt zu verwenden. Sehen Sie hier für verschiedene OS-spezifische Werte.

Methode 2

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

Wie das funktioniert ( Quelle ): Intern prüft sie , ob Python OS-spezifische Module genannt Posix oder nt hat. Wenn Sie diese Module und Call - Methoden auf sie importieren möchten, funktioniert diese groß. Beachten Sie, dass es keine Unterscheidung zwischen Linux oder OSX ist.

Methode 3

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

Wie das funktioniert ( Quelle ): Intern wird es schließlich interne OS APIs aufrufen, erhalten OS versionsspezifischen Namen wie ‚win32‘ oder ‚Win16‘ oder ‚linux1‘ und dann normalisieren , um weitere generische Namen wie ‚Windows‘ oder ‚Linux‘ oder ‚Darwin‘ durch mehrere Heuristiken anwenden. Dies ist die beste tragbare Art und Weise normalisiert OS - Namen zu erhalten.

Zusammenfassung

  • Wenn Sie überprüfen möchten , ob das Betriebssystem Windows oder Linux oder OSX dann der zuverlässigste Weg ist platform.system().
  • Wenn Sie möchten , OS-spezifische Anrufe , sondern über integrierten Python - Module machen posixoder ntverwenden Sie dann os.name.
  • Wenn Sie rohe OS Namen erhalten möchten , wie OS geliefert selbst dann verwenden sys.platform.
Beantwortet am 24/09/2019 um 02:28
quelle vom benutzer

stimmen
0

Ich bin spät, um das Spiel, aber nur für den Fall jemand es braucht, ist dies eine Funktion, die ich Anpassungen auf meinem Code zu machen verwenden, um so läuft es auf Windows, Linux und 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'
Beantwortet am 22/05/2019 um 16:32
quelle vom benutzer

stimmen
0

Wie wäre es eine einfache Implementierung Enum wie die folgenden? Keine Notwendigkeit für externe 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

Einfach können Sie mit Enum Wert zugreifen

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

PS Es ist python3

Beantwortet am 27/09/2018 um 17:39
quelle vom benutzer

stimmen
-4

Nur der Vollständigkeit halber, „OS“ Umgebungsvariable scheint überall definiert werden. Unter Windows XP / 7/8/10 wird es auf "Windows_NT". Unter Linux SuSE SP2 wird es auf "x86-64 Linux SLES11 [2]" gesetzt. Ich habe keinen Zugriff auf OS-X oder BSD Maschinen, wäre interessant, auch dort zu überprüfen.

import os

os_name = os.getenv("OS")
if os_name == "Windows_NT":
    # Windows
elif "linux" in os_name:
    # Linux
elif ...
Beantwortet am 01/12/2015 um 07:28
quelle vom benutzer

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