Was muss ich beachten, um festzustellen, ob ich unter Windows oder Unix usw. arbeite?
Auf dem neuesten MSYS2 meldet MinGW64 sys.platform
als win32
wie von Ihnen gemeldet, aber MSYS2 und UCRT64 melden cygwin
aber nicht msys
.
Was muss ich beachten, um festzustellen, ob ich unter Windows oder Unix usw. arbeite?
Ich habe eine etwas systematischere Auflistung der Werte begonnen, die Sie bei der Verwendung der verschiedenen Module erwarten können (Sie können gerne Ihr System bearbeiten und hinzufügen):
x86_64 aarch64
------ -------
os.name posix posix
sys.platform linux linux
platform.system() Linux Linux
sysconfig.get_platform() linux-x86_64 linux-aarch64
platform.machine() x86_64 aarch64
platform.architecture() ('64bit', '') ('64bit', 'ELF')
sys.platform
wird durch die Kernelversion ergänzt, z. B. linux2
, alles andere bleibt gleichplatform.architecture() = ('64bit', 'ELF')
(mit 32bit-Spalte, die im 32bit-Subsystem läuft)
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:
distutils.util.get_platform()
was identisch ist mit `sysconfig.get_platformUm mit Ihrem System zu vergleichen, führen Sie einfach dieses Skript aus (und fügen Sie bitte die Ergebnisse hier ein, 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())
Sie können auch Folgendes verwenden sys.platform
wenn Sie bereits importiert haben sys
und Sie wollen kein weiteres Modul importieren
>>> import sys
>>> sys.platform
'linux2'
Hat einer der Ansätze irgendwelche Vorteile, abgesehen davon, dass man ein anderes Modul importieren muss oder nicht?
Das Scoping ist der Hauptvorteil. Sie wollen so wenige globale Variablennamen wie möglich. Wenn Sie bereits "sys" als globalen Namen haben, sollten Sie keinen weiteren hinzufügen. Wenn Sie aber "sys" noch nicht verwenden, könnte "_platform" anschaulicher sein und weniger wahrscheinlich mit einer anderen Bedeutung kollidieren.
Wenn Sie benutzerlesbare, aber dennoch detaillierte Daten wünschen, können Sie plattform.plattform()
>>> import platform
>>> platform.platform()
'Linux-3.3.0-8.fc16.x86_64-x86_64-with-fedora-16-Verne'
Hier sind ein paar verschiedene mögliche Aufrufe, die Sie machen können, um herauszufinden, wo Sie sich befinden. linux_distribution und dist sind in neueren Python-Versionen entfernt worden.
import platform
import sys
def linux_distribution():
try:
return platform.linux_distribution()
except:
return "N/A"
def dist():
try:
return platform.dist()
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(dist()),
linux_distribution(),
platform.system(),
platform.machine(),
platform.platform(),
platform.uname(),
platform.version(),
platform.mac_ver(),
))
Die Ergebnisse dieses Skripts, das auf verschiedenen Systemen (Linux, Windows, Solaris, MacOS) und Architekturen (x86, x64, Itanium, Power PC, Sparc) ausgeführt wurde, sind hier verfügbar: https://github.com/hpcugent/easybuild/wiki/OS_flavor_name_version
Ubuntu 12.04 Server gibt zum Beispiel:
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: ('', ('', '', ''), '')
Verwenden Sie plattform.system()
Gibt den System-/OS-Namen zurück, z. B. 'Linux', 'Darwin', 'Java', 'Windows'. Ein leerer String wird zurückgegeben, wenn der Wert nicht ermittelt werden kann.
import platform
system = platform.system().lower()
is_windows = system == 'windows'
is_linux = system == 'linux'
is_mac = system == 'darwin'
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
4 Stimmen
Siehe ( bugs.python.org/issue12326 ) für Details!
7 Stimmen
Hier ist eine verwandte Frage: Name der Linux-Distribution prüfen .