在 64 位 Python 上使用 sys.platform=='win32' 检查是不是安全?
Posted
技术标签:
【中文标题】在 64 位 Python 上使用 sys.platform==\'win32\' 检查是不是安全?【英文标题】:Is it safe to use sys.platform=='win32' check on 64-bit Python?在 64 位 Python 上使用 sys.platform=='win32' 检查是否安全? 【发布时间】:2011-01-09 19:50:23 【问题描述】:区分在 Windows 和其他操作系统(通常是 Linux)上运行 Python 应用程序的常用检查是使用条件:
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 用户感到恼火。
【问题讨论】:
这是一个很好的问题。谢谢。 【参考方案1】:sys.platform
将是 win32
,无论底层 Windows 系统的位数如何,正如您在 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"
可以在网上找到介绍这个的original patch,它提供了更多解释:
主要问题是:Win64 与 Win32 的区别是不是更接近于 Win32,以至于普通情况下的普通 Python 程序员不应该在他的 Python 代码中进行区分。或者,至少,足以使 Python 脚本的这种区分非常罕见,以至于其他提供的机制就足够了(甚至更可取)。目前答案是肯定的。希望 MS 不会改变这个答案。
【讨论】:
【参考方案2】:我个人使用platinfo 来检测底层平台。
>>> from platinfo import PlatInfo
>>> pi = PlatInfo()
>>> pi.os
'win64'
>>> pi.arch
'x64'
>>> pi.name()
'win64-x64'
对于 32 位,pi.name()
返回 win32-x86
。
【讨论】:
如果我能从 vanilla Python 中得到我需要的东西,我宁愿避免使用额外的依赖项。【参考方案3】:请注意,您不能在 Jython 上为此使用 sys.platform
或 os.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 平台上运行的代码。这有点难看,但有效。
【讨论】:
对于 IronPythonsys.platform == 'cli'
.【参考方案4】:
Windows/32 和 Windows/64 的注意事项相同,因此它们应该使用相同的值。唯一的区别在于例如sys.maxint
和 ctypes
。如果您无论如何都需要区分 32 和 64,那么platform
是您的最佳选择。
【讨论】:
我不太明白你的答案。你是说在 sys.platform 中使用 'win32' 构建 64 位 Python 吗?对我来说真正的问题是我没有 64 位机器来检查这个假设。 Windows/64 版本使用“win32”。 (显然其他 64 位操作系统没有)以上是关于在 64 位 Python 上使用 sys.platform=='win32' 检查是不是安全?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Python 2.7.3 在 64 位 Windows 7 上安装 Numpy [关闭]
在 64 位操作系统的 64 位 CPU 上运行 X86-64 Python 有啥好处吗?
在 64 位 python 上训练的 Scikit-Learn 随机森林不会在 32 位 python 上打开