Python:Auf welchem Betriebssystem verwende ich?
-
08-06-2019 - |
Frage
Worauf muss ich achten, um festzustellen, ob ich Windows oder Unix usw. verwende?
Lösung
>>> import os
>>> print os.name
posix
>>> import platform
>>> platform.system()
'Linux'
>>> platform.release()
'2.6.22-15-generic'
Die Ausgabe von platform.system()
ist wie folgt:
- Linux:
Linux
- Mac:
Darwin
- Windows:
Windows
Sehen: Plattform – Zugriff auf die Identifikationsdaten der zugrunde liegenden Plattform
Andere Tipps
Verdammt – lbrandy ist mir zuvorgekommen, aber das bedeutet nicht, dass ich Ihnen nicht die Systemergebnisse für Vista liefern kann!
>>> import os
>>> os.name
'nt'
>>> import platform
>>> platform.system()
'Windows'
>>> platform.release()
'Vista'
...und ich kann nicht glauben, dass noch niemand etwas für Windows 10 gepostet hat:
>>> import os
>>> os.name
'nt'
>>> import platform
>>> platform.system()
'Windows'
>>> platform.release()
'10'
Zur Erinnerung, hier sind die Ergebnisse auf dem Mac:
>>> import os
>>> os.name
'posix'
>>> import platform
>>> platform.system()
'Darwin'
>>> platform.release()
'8.11.1'
Beispielcode zur Unterscheidung von Betriebssystemen mit 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
Sie können sys.platform auch verwenden, wenn Sie bereits sys importiert haben und kein weiteres Modul importieren möchten
>>> import sys
>>> sys.platform
'linux2'
Wenn Sie vom Benutzer lesbare, aber dennoch detaillierte Daten wünschen, können Sie diese verwenden platform.platform()
>>> import platform
>>> platform.platform()
'Linux-3.3.0-8.fc16.x86_64-x86_64-with-fedora-16-Verne'
Hier sind einige verschiedene mögliche Anrufe, mit denen Sie feststellen können, wo Sie sich befinden
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 Ausgaben dieses Skripts, die auf einigen verschiedenen Systemen (Linux, Windows, Solaris, MacOS) und Architekturen (x86, x64, Itanium, Power PC, Sparc) ausgeführt wurden, sind hier verfügbar: https://github.com/hpcugent/easybuild/wiki/OS_flavor_name_version
Der Ubuntu 12.04-Server bietet beispielsweise Folgendes:
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: ('', ('', '', ''), '')
Ich mache das
import sys
print sys.platform
Dokumente hier: sys.plattform.
Alles, was Sie brauchen, befindet sich wahrscheinlich im sys-Modul.
Ich verwende das WLST-Tool, das mit Weblogic geliefert wird, und es implementiert das Plattformpaket nicht.
wls:/offline> import os
wls:/offline> print os.name
java
wls:/offline> import sys
wls:/offline> print sys.platform
'java1.5.0_11'
Abgesehen vom Patchen des Systems javaos.py (Problem mit os.system() unter Windows 2003 mit jdk1.5) (was ich nicht kann, ich muss sofort Weblogic verwenden), das ist es, was ich verwende:
def iswindows():
os = java.lang.System.getProperty( "os.name" )
return "win" in os.lower()
Wie wäre es mit einer neuen Antwort:
import psutil
psutil.MACOS #True (OSX is deprecated)
psutil.WINDOWS #False
psutil.LINUX #False
Dies wäre die Ausgabe, wenn ich MACOS verwenden würde
>>> 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)
Für Jython besteht die einzige Möglichkeit, den Betriebssystemnamen zu ermitteln, den ich gefunden habe, darin, ihn zu überprüfen os.name
Java-Eigenschaft (versucht mit sys
, os
Und platform
Module für Jython 2.5.3 unter 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
Ich habe mit einer etwas systematischeren Auflistung der Werte begonnen, die Sie mit den verschiedenen Modulen erwarten können (Sie können Ihr System gerne bearbeiten und hinzufügen):
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', '')
- Habe es mit Archlinux und Mint versucht, habe die gleichen Ergebnisse erzielt
- auf Python2
sys.platform
wird durch die Kernel-Version angehängt, z.B.linux2
, alles andere bleibt gleich - Dieselbe Ausgabe auf dem Windows-Subsystem für Linux (versucht mit Ubuntu 18.04 LTS), außer
platform.architecture() = ('64bit', 'ELF')
WINDOWS (64bit)
(mit 32-Bit-Spalte, die im 32-Bit-Subsystem ausgeführt wird)
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 Anmerkungen:
- Es gibt auch
distutils.util.get_platform()
was identisch mit „sysconfig.get_platform“ ist - Anaconda unter Windows ist dasselbe wie das offizielle Python-Windows-Installationsprogramm
- Ich habe weder einen Mac noch ein echtes 32-Bit-System und war nicht motiviert, es online zu machen
Um einen Vergleich mit Ihrem System durchzuführen, führen Sie einfach dieses Skript aus (und hängen Sie die Ergebnisse bitte hier an, falls sie fehlen :)
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())
Interessante Ergebnisse unter Windows 8:
>>> import os
>>> os.name
'nt'
>>> import platform
>>> platform.system()
'Windows'
>>> platform.release()
'post2008Server'
Bearbeiten: Das ist ein Insekt
Passen Sie auf, wenn Sie Windows mit Cygwin verwenden os.name
Ist posix
.
>>> import os, platform
>>> print os.name
posix
>>> print platform.system()
CYGWIN_NT-6.3-WOW
im gleichen Sinne....
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")
Wenn Sie nicht nach der Kernel-Version usw. suchen, sondern nach der Linux-Distribution, können Sie Folgendes 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
Dies funktioniert natürlich nur, wenn Sie es unter Linux ausführen.Wenn Sie plattformübergreifend ein allgemeineres Skript wünschen, können Sie dieses mit Codebeispielen aus anderen Antworten kombinieren.
Versuche dies:
import os
os.uname()
und du kannst es schaffen:
info=os.uname()
info[0]
info[1]
Überprüfen Sie die verfügbaren Tests mit Modulplattform und drucken Sie die Antwort für Ihr System aus:
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
Sie können auch nur das Plattformmodul verwenden, ohne das Betriebssystemmodul zu importieren, um 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 übersichtliches Layout für Berichtszwecke kann mit dieser Zeile erreicht werden:
for i in zip(['system','node','release','version','machine','processor'],platform.uname()):print i[0],':',i[1]
Das ergibt diese 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 normalerweise fehlt, ist die Betriebssystemversion. Wenn Sie jedoch Windows, Linux oder Mac verwenden, sollten Sie wissen, dass eine plattformunabhängige Möglichkeit darin besteht, diesen Test zu verwenden:
In []: for i in [platform.linux_distribution(),platform.mac_ver(),platform.win32_ver()]:
....: if i[0]:
....: print 'Version: ',i[0]
Wenn Sie macOS X ausführen und ausführen platform.system()
Sie bekommen Darwin, weil MacOS X auf Apples Darwin OS aufgebaut ist.Darwin ist der Kernel von macOS X und im Wesentlichen macOS X ohne GUI.
Diese Lösung funktioniert für beide python
Und 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>"
So verwenden:
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())
Benutzen Sie die import os
Und os.name
Schlüsselwörter.
Wie wäre es mit einer einfachen Enum-Implementierung wie der folgenden?Keine externen Bibliotheken erforderlich!
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
Sie können einfach mit dem Enum-Wert darauf zugreifen
if OS.LINUX.value:
print("Cool it is Linux")
P.S. Es ist Python3
Den Code können Sie sich hier ansehen pyOSinfo
welches Teil davon ist Pip-Datum Paket, um die relevantesten Betriebssysteminformationen aus Ihrer Python-Distribution zu erhalten.
Einer der häufigsten Gründe, warum Menschen ihr Betriebssystem überprüfen möchten, ist die Terminalkompatibilität und die Verfügbarkeit bestimmter Systembefehle.Leider hängt der Erfolg dieser Überprüfung in gewissem Maße von Ihrer Python-Installation und Ihrem Betriebssystem ab.Zum Beispiel, uname
ist in den meisten Windows-Python-Paketen nicht verfügbar.Das obige Python-Programm zeigt Ihnen die Ausgabe der am häufigsten verwendeten integrierten Funktionen, die bereits von bereitgestellt werden os, sys, platform, site
.
Der beste Weg, nur den wesentlichen Code zu erhalten, ist also, ihn anzusehen Das als Beispiel.(Ich glaube, ich hätte es einfach hier einfügen können, aber das wäre politisch nicht korrekt gewesen.)
Ich komme zu spät zum Spiel, aber für den Fall, dass es jemand braucht: Dies ist eine Funktion, mit der ich Anpassungen an meinem Code vornehme, damit er unter Windows, Linux und MacOs läuft:
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'