【问题标题】:Python - Override environment variables homedrive and homepathPython - 覆盖环境变量 homedrive 和 homepath
【发布时间】:2013-05-15 15:23:41
【问题描述】:

问题: 是否无法在 Python 中覆盖 HOMEDRIVEHOMEPATH 变量? 这些变量究竟存储在哪里,我在环境变量对话框中看不到它们。

解释:

在 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 系统变量,它也会被其他地方覆盖。

【问题讨论】:

  • 你想在哪里使用这些变量?你不能在你的代码中覆盖它们吗:os.environ['HOMEDRIVE']='D:'
  • 哪个版本的 Windows?
  • 嗨 Dhara,这是 Windows 7。我没有尝试在我的代码中覆盖,我想我可能会这样做,我更感兴趣的是弄清楚为什么这首先不起作用地方。该程序将在网络上的许多计算机上运行,​​在某些情况下,我可能实际上想要尊重 HOMEDRIVE 设置。我不打算要求用户在系统属性中设置此变量。那时我意识到这不适用于这个变量。
  • 每次设置环境变量都需要重启命令行。

标签: python environment


【解决方案1】:

如果你只想在 Python 中覆盖变量,你可以在代码中实现:

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

如果您将它放在sitecustomize.py 中,那么它将在您每次调用 Python 脚本时运行。来自文档:

... 尝试导入模块 命名为sitecustomize,可以执行任意特定于站点的 定制。它通常由系统管理员在 站点包目录。

但是,如果您想修改 Windows 本身的环境变量,请参阅this superuser stackexchange 答案。

【讨论】:

  • 我不希望对此进行硬编码 - 我需要计算机使用当前设置的 HOMEDRIVE,我只打算在某些未正确设置的计算机上手动更改 Windows 环境中的 HOMEDRIVE。但是,从您到超级用户 stackexchange 答案的链接,我现在想知道我的 IT 部门设置是否强制 HOMEDRIVE 成为该值。我还没有确定这一点,但我会继续将你的答案标记为正确。如果我稍后弄清楚到底是什么问题,我会回复。
  • 很好的答案!这是有道理的。我被困住了使用os.environ.setdefault(key, val),它只在键还没有值的情况下设置变量。这个答案提供了一个有意义的选择。
猜你喜欢
  • 2010-10-11
  • 2016-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多