2013-05-15 100 views
2

问题: Python中是否无法覆盖HOMEDRIVEHOMEPATH变量? 这些变量存储在哪里,我没有在环境变量对话框中看到它们。Python - 覆盖环境变量homedrive和homepath

说明:

在Python中,你可以访问使用

os.environ['variable_name'] 

例如,环境变量,如果我去到系统属性 - >高级 - >环境变量,创建一个名为GARY的系统变量价值XYZ,然后从我的python脚本我能够成功访问此使用

os.environ['GARY'] 

(按预期返回'XYZ')

但是,我无法更改变量HOMEDRIVE的值。当我在我的python脚本中使用os.environ['HOMEDRIVE']时,它返回C:。所以我去了系统属性 - >高级 - >环境变量,我创建了一个名为HOMEDRIVE的系统变量,并将它的值设置为X:。但是,当我在我的脚本中使用

os.environ['HOMEDRIVE'] 

,它仍然返回C:

是没可能覆盖HOMEDRIVEHOMEPATH变量?这些在某些方面是特别的吗?

这些变量存储在哪里,我没有在环境变量对话框中看到它们。可能它们被存储在其他地方,所以即使我在Windows中创建了一个HOMEDRIVE系统变量,它仍然在其他地方被覆盖。

+0

你想在哪里使用这些变量?难道你不能在你的代码中重载它们:'os.environ ['HOMEDRIVE'] ='D:'' – Dhara

+0

哪个版本的Windows? – Dhara

+0

嗨达拉,这是Windows 7.我没有尝试覆盖在我的代码中,我认为我可以做到这一点,我更有兴趣弄清楚为什么这不起作用。该程序将在网络上的许多计算机上运行,​​在某些情况下,我可能实际上要尊重HOMEDRIVE设置。在那些我不会让我要求用户在系统属性中设置这个变量的。那是当我意识到这不适用于这个变量。 – Gary

回答

2

如果你想覆盖仅在Python的变量,你可以做到这一点的代码:

os.environ['HOMEDRIVE'] = 'D:' 

如果你把这个在sitecustomize.py,那么它会在您每次调用Python脚本运行。从DOC:

...试图导入一个模块 名为sitecustomize,它可以执行任意站点特定的 定制。它通常由系统管理员在 site-packages目录中创建。

但是,如果要修改Windows自身的环境变量,请参阅this超级用户stackexchange的答案。

+0

我不想硬编码 - 我需要电脑使用当前设置的HOMEDRIVE,我只打算在某些未正确设置的计算机上的Windows环境中手动更改HOMEDRIVE。但是,从您的超级用户stackexchange答案的链接,我现在想知道我的IT部门设置是否迫使HOMEDRIVE成为该值。我还没有确定这一点,但我会继续前进,并将你的答案标记为现在正确。如果我后来弄清楚到底是什么问题,我会回复。 – Gary

+0

很好的回答!这是有道理的。我被'os.environ.setdefault(key,val)'卡住了,它只在密钥没有值时才设置变量。这个答案是一个有意义的选择。 – modulitos