当前位置:  开发笔记 > 编程语言 > 正文

用Python检测64位操作系统(windows)

如何解决《用Python检测64位操作系统(windows)》经验,为你挑选了6个好方法。

有谁知道我将如何检测Windows在Python下的位版本.我需要知道这是一种为Program Files使用正确文件夹的方法.

非常感谢



1> phobie..:

我认为这个问题的最佳解决方案已由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)



2> Jochen Ritze..:

我想你应该查看os.environ['PROGRAMFILES']程序文件文件夹.


+1解决问题而不是回答问题 - 并不总是一件好事,但在这种情况下它是.
仅供参考:如果您运行32位python,它将导致x86版本,但如果运行64位python则会导致x64版本.
这是正确的解决方案,而不是硬编码目录.但是,这不会导致64位Windows上的32位程序文件,如果需要的话.

3> Mark Ribau..:

来到这里搜索正确检测是否在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方法正常工作.



4> Joe Koberg..:

platformmodule - 访问底层平台的标识数据

>>> import platform
>>> platform.architecture()
('32bit', 'WindowsPE')

在64位Windows上,32位Python返回:

('32bit', 'WindowsPE')

这意味着这个答案即使已被接受,也是不正确的.请参阅下面的一些答案,了解可能适用于不同情况的选项.


在64位Windows上它返回相同的东西.
@Tadeck你可能在64位Windows上运行64位Python.
这不起作用,因为python选择始终返回win32以获得兼容性.这也是为什么只有'hackish'方式才能找到答案的原因.
@Thomas如果我执行`print platform.architecture()[0]`,它会在Windows 7 64bit上显示`64bit`.

5> Matthew Scou..:
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


这确实返回了真正的平台,即使是在64位窗口上运行的32位python也是如此; 然而,对于32位窗口的32位python,true_platform将是"x86",对于许多机器(大多数英特尔消费者CPU,大多数AMD消费者CPU),Windows 64位上的32位或64位python的"AMD64",对于32位或64位python,"I64" Windows 64位用于安腾和类似的机器.只是意识到这一点.
来源:http://msdn.microsoft.com/en-us/library/aa384274(v = vs.85).aspx

6> gauss256..:

许多这些提议的解决方案,例如platform.architecture(),都会失败,因为它们的结果取决于您运行的是32位还是64位Python.

我发现唯一可靠的方法是检查是否存在os.environ ['PROGRAMFILES(X86)'],这是不幸的.

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有