Ist es sicher zu verwenden sys.platform == 'win32' check auf 64-Bit-Python?

Die übliche Überprüfung, um zwischen laufender Python-Anwendung auf Windows und auf anderen Betriebssystemen zu unterscheiden (Linux normalerweise) ist, bedingte zu verwenden:

if sys.platform == 'win32': ... 

Aber ich frage mich, ist es sicher zu bedienen heute, wenn 64-Bit-Python ist weit verbreitet in den letzten Jahren verwendet? Ist 32 wirklich 32-Bit, oder im Grunde bezieht es sich auf Win32 API?

Wenn es möglich ist, einen Tag sys.platform als 'win64' zu haben, vielleicht wäre eine solche Bedingung universeller?

 if sys.platform.startswith('win'): ... 

Es gibt auch einen anderen Weg, um Windows zu erkennen, dass ich mich bewusst bin:

 if os.name == 'nt': ... 

Aber ich habe wirklich nie in anderen Code die Verwendung der letzteren gesehen.

Was ist der beste Weg dann?

UPD : Ich würde gerne vermeiden, zusätzliche Bibliotheken, wenn ich kann. Erfordert die Installation von zusätzlichen Bibliothek zu überprüfen, dass ich arbeite nicht in der Windows kann für Linux-Benutzer ärgerlich sein.

4 Solutions collect form web for “Ist es sicher zu verwenden sys.platform == 'win32' check auf 64-Bit-Python?”

sys.platform wird win32 unabhängig von der Bitness des zugrunde liegenden Windows-Systems, wie Sie in PC/pyconfig.h (aus der Python 2.6 PC/pyconfig.h ):

 #if defined(MS_WIN64) /* maintain "win32" sys.platform for backward compatibility of Python code, the Win64 API should be close enough to the Win32 API to make this preferable */ # define PLATFORM "win32" 

Es ist möglich, den ursprünglichen Patch zu finden, der dies im Web vorgestellt hat, was ein bisschen mehr Erklärung bietet:

Die Hauptfrage ist: ist Win64 so viel mehr wie Win32 als anders als es, dass die Common-Case-General Python-Programmierer sollte nicht immer die Differenzierung in seinem Python-Code zu machen. Oder zumindest so genug, dass eine solche Differenzierung durch den Python-Skriptor selten genug ist, dass ein anderer Mechanismus ausreichend ist (sogar bevorzugt). Derzeit ist die Antwort ja. Hoffentlich wird MS diese Antwort nicht ändern.

Beachten Sie, dass Sie weder sys.platform noch os.name für Jython verwenden können:

 $ jython -c "import sys, os; print sys.platform; print os.name" java1.6.0_20 java 

Ich denke, es gibt einen Plan in Jython-Projekt, um os.name zu ändern, um das zugrunde liegende Betriebssystem ähnlich wie CPython zu melden, aber weil Leute mit os.name == 'java' zu überprüfen sind sie auf Jython diese Änderung kann nicht über Nacht gemacht werden. Es gibt aber schon os._name auf Jython 2.5.x:

 $ jython -c "import os; print os._name" posix 

Persönlich neige ich dazu, os.sep == '/' mit Code zu verwenden, der sowohl auf Jython und CPython als auch auf Windows und unixy Plattformen laufen muss. Es ist etwas hässlich aber funktioniert.

Die Vorbehalte für Windows / 32 und Windows / 64 sind gleich, also sollten sie den gleichen Wert verwenden. Der einzige Unterschied wäre zB sys.maxint und ctypes . Wenn Sie zwischen 32 und 64 unterscheiden müssen, dann ist die platform die beste Wette.

Persönlich verwende ich platinfo für die Erkennung der zugrunde liegenden Plattform.

 >>> from platinfo import PlatInfo >>> pi = PlatInfo() >>> pi.os 'win64' >>> pi.arch 'x64' >>> pi.name() 'win64-x64' 

Für 32-Bit gibt pi.name() win32-x86 .

  • Abfangen der Fenstertaste (Tkinter-Fenster) wirft einen Tcl-Fehler aus
  • Verbinden mit Microsoft SQL Server mit Python
  • Fenster im Fenster
  • Tkinter: wie man Fenster schaltet, wenn eine Taste gedrückt wird
  • Holen Sie sich tkinter.tclerror beim Schließen der Pythonschildkröte, bevor es fertig ist
  • Python Tkinter Fenster nicht schließen
  • Mit libarchiv in python unter Windows
  • Wie benutzt man Pythons "easy_install" auf Windows ... es ist nicht so einfach
  • Wie man verschiedene Python-Versionen in cmd [duplicate]
  • Machen Sie ein Fenster oberste Priorität
  • Python: Wie kann man CLI beenden, wenn es beim Blockieren von raw_input steckt?
  • Python ist die beste Programmiersprache der Welt.