bia*_*lix 42 python windows 64-bit cross-platform 32bit-64bit
区分在Windows上运行Python应用程序和在其他操作系统(通常是Linux)上运行的通常检查是使用条件:
if sys.platform == 'win32':
...
Run Code Online (Sandbox Code Playgroud)
但我想今天使用64位Python在过去几年中使用得更广泛是否安全?32真的意味着32位,还是基本上它指的是Win32 API?
如果有可能将一天的sys.platform作为'win64',那么这种情况会更普遍吗?
if sys.platform.startswith('win'):
...
Run Code Online (Sandbox Code Playgroud)
还有另一种检测Windows的方法我知道:
if os.name == 'nt':
...
Run Code Online (Sandbox Code Playgroud)
但我真的从未在其他代码中看到后者的使用.
那么最好的方法是什么?
UPD:如果可以,我想避免使用额外的库.需要安装额外的库以检查我是否在Windows中工作可能对Linux用户来说很烦人.
Tor*_*rek 38
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"
Run Code Online (Sandbox Code Playgroud)
可以找到在网络上引入此内容的原始补丁,它提供了更多解释:
主要的问题是:Win64更像是Win32而不是它的普通案例通用Python程序员不应该在他的Python代码中进行区分.或者,至少足以使Python脚本的这种区分足够罕见,以至于其他一些提供的机制就足够了(甚至更可取).目前答案是肯定的.希望MS不会改变这个答案.
我个人使用platinfo来检测底层平台.
>>> from platinfo import PlatInfo
>>> pi = PlatInfo()
>>> pi.os
'win64'
>>> pi.arch
'x64'
>>> pi.name()
'win64-x64'
Run Code Online (Sandbox Code Playgroud)
对于32位,pi.name()
返回win32-x86
.
请注意,您不能在Jython上使用sys.platform
或os.name
为此:
$ jython -c "import sys, os; print sys.platform; print os.name"
java1.6.0_20
java
Run Code Online (Sandbox Code Playgroud)
我认为在Jython项目中有一个计划要改变os.name
报告底层操作系统,就像CPython一样,但是因为人们正在使用它os.name == 'java'
来检查它们是否在Jython上,这种改变不可能在一夜之间完成.但是,os._name
Jython 2.5.x上已有:
$ jython -c "import os; print os._name"
posix
Run Code Online (Sandbox Code Playgroud)
我个人倾向于使用os.sep == '/'
需要在Jython和CPython上运行的代码,以及Windows和unixy平台上运行的代码.它有些难看,但有效.
归档时间: |
|
查看次数: |
14731 次 |
最近记录: |