Python在64位vista上获得了os.environ [“ProgramFiles”]的错误值

时间:2009-08-16 07:11:16

标签: python windows 64-bit

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”的正确值?

4 个答案:

答案 0 :(得分:12)

来自Wikipedia page

  

%PROGRAMFILES%

     

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

因此,为了获得C:\ Program Files,您显然想要检查%ProgramW6432%

答案 1 :(得分:7)

您使用的是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。

答案 2 :(得分:5)

您可以安装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 :(得分:1)

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