【问题标题】:Python get wrong value for os.environ["ProgramFiles"] on 64bit vistaPython 在 64 位 vista 上获取 os.environ["ProgramFiles"] 的错误值
【发布时间】:2009-08-16 07:11:16
【问题描述】:

Vista64 机器上的 Python 2.4.3。

环境中有以下2个变量:

ProgramFiles=C:\Program Files
ProgramFiles(x86)=C:\Program Files (x86)

但是当我运行以下命令时

import os
print os.environ["ProgramFiles"]
print os.environ["ProgramFiles(x86)"]

我明白了:

C:\Program Files (x86)
C:\Program Files (x86)

知道如何获得“ProgramFiles”的正确值吗?

【问题讨论】:

  • 此行为因您的 python 可执行文件是 32 位还是 64 位而异。请说明是哪个。

标签: python windows 64-bit


【解决方案1】:

来自Wikipedia page

%ProgramFiles%

该变量指向Program Files目录,里面存放了Windows等所有已安装的程序。英语系统的默认设置是 C:\Program Files。在 64 位版本的 Windows(XP、2003、Vista)中,还有默认为 C:\Program Files (x86) 的 %ProgramFiles(x86)% 和默认为 C:\Program Files 的 %ProgramW6432%。 %ProgramFiles% 本身取决于请求环境变量的进程本身是 32 位还是 64 位(这是由 Windows-on-Windows 64 位重定向引起的)。

所以要获取 C:\Program Files,您显然想检查 %ProgramW6432%

【讨论】:

    【解决方案2】:

    您可以安装 Python 2.5.4 并重试吗?更新:我的意思是 2.5.4 的 x64 版本。 AFAIK 2.4 仅适用于 Windows x86 和 IA64,不适用于 x64。

    我在 Win 7 x64 上运行 2.5.4 x64,但没有得到相同的结果,但我不确定问题出在 Python 还是 Vista 上。

    Python 2.5.4 (r254:67916, Dec 23 2008, 15:19:34) [MSC v.1400 64 bit (AMD64)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import os
    >>> print os.environ["ProgramFiles"]
    C:\Program Files
    >>> print os.environ["ProgramFiles(x86)"]
    C:\Program Files (x86)
    >>>
    

    【讨论】:

      【解决方案3】:

      您使用的是 32 位版本的 Python 解释器。使用 32 位软件时,WOW64 将创建一个新环境,具有自己的文件夹和替换。

      只要启动 64 位和 32 位版本的命令提示符就可以明白我在说什么了:

      64 位 cmd.exe:

      C:\Documents and Settings\Administrator>set prog
      ProgramFiles=C:\Program Files
      ProgramFiles(x86)=C:\Program Files (x86)
      

      32 位 cmd.exe:

      C:\WINDOWS\SysWOW64>set prog
      ProgramFiles=C:\Program Files (x86)
      ProgramFiles(x86)=C:\Program Files (x86)
      ProgramW6432=C:\Program Files
      

      从上面的第二段摘录中可以看出,要获取 64 位程序文件,您必须使用 ProgramW6432 环境变量。

      但是,另一种方法也可以解决将来可能出现的其他问题(尤其是注册表设置!):只需使用 64 位版本的 Python - 即使我不知道从哪里下载 64 位版本2.4。

      【讨论】:

        【解决方案4】:

        Python x32 和 x64 之间的唯一区别是 os.environ["ProgramFiles"]。因此,如果您想在两个 Python 平台上都安全,请使用 ProgramW6432ProgramFiles(x86),但不要使用 ProgramFiles

        Python 3 x64(在 Win10 x64 上):

        >>> import os
        >>> os.environ["ProgramFiles"]
        'C:\\Program Files'
        >>> os.environ["ProgramFiles(x86)"]
        'C:\\Program Files (x86)'
        >>> os.environ["ProgramW6432"]
        'C:\\Program Files'
        >>> os.environ["ProgramData"]
        'C:\\ProgramData'
        

        Python 3 x32:

        >>> import os
        >>> os.environ["ProgramFiles"]
        'C:\\Program Files (x86)'
        # The other paths are similar to x64
        

        【讨论】:

          猜你喜欢
          • 2010-10-21
          • 2010-09-20
          • 2011-10-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-04-10
          • 1970-01-01
          • 2010-11-07
          相关资源
          最近更新 更多