gpt4 book ai didi

python - 什么时候 os.environ ['foo' ] 不匹配 os.getenv ('foo' )?

转载 作者:IT老高 更新时间:2023-10-28 21:55:44 32 4
gpt4 key购买 nike

我有一个小的 Python 应用程序,通过 subprocess.Popen 启动,它接受一些环境变量形式的参数。我通过将环境结构传递给 Popen 调用来做到这一点。然后程序通过 os.getenv 读取变量。

或者更确切地说,它曾经以这种方式阅读它们。在 Windows 上,它运行良好。但是在我们的 FreeBSD 服务器上,os.getenv 为我们传入的所有参数返回 None。奇怪的是 os.environ 有值就好了——事实上,只需将所有 os.getenv('foo') 调用切换到 os.environ['foo'] 就可以在 < em>两个平台。

为什么这些值不同?什么时候比较合适?

最佳答案

os.environ 是在导入 os 模块时创建的,除非直接修改,否则不会反射(reflect)随后发生的环境更改。然而,有趣的是,os.getenv() 实际上也没有获取最新的环境变量,至少在 CPython 中没有。你看,在 CPython 中,os.getenv() 显然只是 os.environ.get() 的一个包装器(参见 http://hg.python.org/cpython/file/6671c5039e15/Lib/os.py#l646)。因此,将 os.getenv() 与所述实现一起使用的主要原因似乎是当您希望在 os.environ 中找不到环境变量名称时返回默认值 的键而不是 KeyError 或任何抛出的东西,并且您想保存一些字符。

FreeBSD 上的实现完全有可能有一些奇怪的噱头导致其行为不同,但我不确定为什么会这样。如果可以的话,在您使用的一台 FreeBSD 机器上查看 os.py 的副本。

关于python - 什么时候 os.environ ['foo' ] 不匹配 os.getenv ('foo' )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10952507/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com