有谁知道我将如何检测Windows在Python下的位版本.我需要知道这是一种为Program Files使用正确文件夹的方法.
非常感谢
我认为这个问题的最佳解决方案已由Mark Ribau发布.
Python 2.7及更新版本问题的最佳答案是:
def is_os_64bit(): return platform.machine().endswith('64')
在Windows上,跨平台功能在platform.machine()
内部使用Matthew Scoutens答案中使用的环境变量.
我发现了以下值:
WinXP-32:x86
Vista-32:x86
Win7-64:AMD64
Debian-32:i686
Debian-64:x86_64
对于Python 2.6及更早版本:
def is_windows_64bit(): if 'PROCESSOR_ARCHITEW6432' in os.environ: return True return os.environ['PROCESSOR_ARCHITECTURE'].endswith('64')
要查找我使用的Python解释器位版本:
def is_python_64bit(): return (struct.calcsize("P") == 8)
我想你应该查看os.environ['PROGRAMFILES']
程序文件文件夹.
来到这里搜索正确检测是否在64位窗口上运行,将上述所有内容编译成更简洁的内容.
下面你将找到一个测试是否在64位窗口上运行的函数,一个获取32位Program Files文件夹的函数,以及一个获取64bit Program Files文件夹的函数; 所有无论运行32位还是64位python.当运行32位python时,大多数事情在64位运行时报告为32位,甚至os.environ['PROGRAMFILES']
.
import os def Is64Windows(): return 'PROGRAMFILES(X86)' in os.environ def GetProgramFiles32(): if Is64Windows(): return os.environ['PROGRAMFILES(X86)'] else: return os.environ['PROGRAMFILES'] def GetProgramFiles64(): if Is64Windows(): return os.environ['PROGRAMW6432'] else: return None
注意:是的,这有点hackish.所有其他"应该工作"的方法,在64位Windows上运行32位Python时不起作用(至少对于我尝试过的各种2.x和3.x版本).
编辑:
2011-09-07 - 添加了一个说明为什么只有这种hackish方法正常工作.
platform
module - 访问底层平台的标识数据
>>> import platform >>> platform.architecture() ('32bit', 'WindowsPE')
在64位Windows上,32位Python返回:
('32bit', 'WindowsPE')
这意味着这个答案即使已被接受,也是不正确的.请参阅下面的一些答案,了解可能适用于不同情况的选项.
def os_platform(): true_platform = os.environ['PROCESSOR_ARCHITECTURE'] try: true_platform = os.environ["PROCESSOR_ARCHITEW6432"] except KeyError: pass #true_platform not assigned to if this does not exist return true_platform
http://blogs.msdn.com/b/david.wang/archive/2006/03/26/howto-detect-process-bitness.aspx
许多这些提议的解决方案,例如platform.architecture(),都会失败,因为它们的结果取决于您运行的是32位还是64位Python.
我发现唯一可靠的方法是检查是否存在os.environ ['PROGRAMFILES(X86)'],这是不幸的.