如何在Python中设置和检索环境变量

6

我需要在Python中设置环境变量,我尝试了以下命令:

import os
basepath = os.putenv('CPATH','/Users/cat/doc') 
basepath = os.getenv('CPATH','/Users/cat/doc') 

当我打印变量时,它们没有被设置:

print basepath
None

我做错了什么?

换句话说,我想基于环境变量创建一个基本路径。 我正在测试这个:

os.environ["CPATH"] = "/Users/cat/doc"
print os.environ["CPATH"]
base_path=os.getenv('C_PATH')

当我尝试打印basepath时: print basepath 它总是返回 无


什么操作系统? - Ofiris
OS X Mavericks(版本10.9) - CatarinaCM
你在使用 Flask 吗? - Ofiris
@Ofiris:我在使用Flask时遇到了这个问题。os.getenv('PATH') == os.environ('PATH') == os.environ.get('PATH') == None。有什么建议吗? - brandones
3个回答

12

试试这个。

os.environ["CPATH"] = "/Users/cat/doc"

Python 文档 很明确。

直接调用 putenv() 不会更改 os.environ,因此最好修改 os.environ。

基于文档说明,os.getenv() 在大多数 Unix 和 Windows 版本上都可用,但未列出 OS X。

请使用下面的代码片段检索值。

value = os.environ.get('CPATH')

这样我可以打印环境变量,但是当我尝试将其赋值给基本路径时,例如:base_path = os.getenv('CPATH')。 - CatarinaCM
@CatarinaCM,抱歉?修改os.environ肯定会更新脚本中活动的环境变量 - 而且base_path = os.environ.get('CPATH')(如果你想在找不到的情况下返回None)是最佳实践的获取方法。如果你看到相反的结果,请提供一个复现器,这样我们就知道你是如何进行测试的。 - Charles Duffy
使用 os.environ.get('CPATH'),如 @Charles 所建议的。 - pgiecek

2
使用 os.environ
os.environ['CPATH'] = '/Users/cat/doc'    
print os.environ['CPATH']     # /Users/cat/doc
print os.environ.get('CPATH') # /Users/cat/doc

请参考上面的链接以获取更多细节:
如果平台支持putenv()函数,则此映射可用于修改环境并查询环境。当修改映射时,putenv()将自动调用。
请注意,直接调用putenv()不会更改os.environ,因此最好修改os.environ。

0

在函数完成时恢复环境变量是一个好的实践。 您可能需要像这个问题中描述的modified_environ上下文管理器来恢复环境变量。

使用示例:

with modified_environ(CPATH='/Users/cat/doc'):
    call_my_function()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接