在64位Python上使用sys.platform =='win32'检查安全吗?

区分Windows上运行的Python应用程序和其他操作系统(通常是Linux)的常见检查是使用条件:

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

但是我想知道今天64位Python在去年被广泛使用的时候是否安全呢? 32真的意味着32位,或者基本上是指Win32 API?

如果有可能有一天sys.platform为“win64”也许这样的条件会更普遍?

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

还有另一种检测Windows的方法我知道:

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

但是我从来没有在其他的代码中看到后者的使用。

那么最好的方法是什么?

UPD :如果可以,我想避免使用额外的库。 要求安装额外的库来检查我是不是在Windows工作,可能会让Linux用户烦恼。

不pipe底层Windows系统的sys.platform如何, sys.platform都是win32 ,你可以在PC/pyconfig.h (从Python 2.6源代码发行版)中看到:

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

有可能find在networking上引入这个原始的补丁 ,这提供了更多的解释:

主要的问题是:Win64与Win32相比更像Win32,不同于普通情况的一般Python程序员不应该在他的Python代码中进行区分。 或者,至less,Python脚本的这种区分足够稀less,以至于其他一些提供的机制是足够的(甚至是更好的)。 目前答案是肯定的。 希望MS不会改变这个答案。

请注意,对于Jython,您不能使用sys.platformos.name

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

我觉得在Jython项目中有一个计划来改变os.name来报告基本的操作系统类似于CPython,但是因为人们使用os.name == 'java'来检查它们是否在Jython上,所以这个改变不能在一夜之间完成。 但是,在Jython 2.5.x上已经有了os._name

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

就个人而言,我倾向于使用os.sep == '/'代码,它需要在Jython和CPython上运行,而在Windows和unixy平台上运行。 这有点丑陋,但工作。

我个人使用platinfo来检测底层平台。

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

对于32位, pi.name()返回win32-x86

Windows / 32和Windows / 64的注意事项是相同的,所以它们应该使用相同的值。 唯一的区别是在例如sys.maxintctypes 。 如果你需要区分32和64,那么platform是你最好的select。