题 如何从Python访问环境变量?


我设置了一个我想在Python应用程序中访问的环境变量。我如何获得这个价值?


1280
2018-02-05 13:03


起源




答案:


通过访问环境变量 os.environ

import os
print(os.environ['HOME'])

或者您可以使用以下命令查看所有环境变量的列表:

os.environ

有时您可能需要查看完整列表!

# using get will return `None` if a key is not present rather than raise a `KeyError`
print(os.environ.get('KEY_THAT_MIGHT_EXIST'))

# os.getenv is equivalent, and can also give a default value instead of `None`
print(os.getenv('KEY_THAT_MIGHT_EXIST', default_value))

Python默认安装 在Windows上 C:\Python。如果你想在运行python时找到答案,你可以这样做:

import sys
print(sys.prefix)

1951
2018-02-05 13:18



你好,感谢您对“默认安装”的有效回复;从有效的角度来理解它,而不是通过链接。这真的是我赞赏:)但关于我的(1)问题,请看下面的命令和输出片段:>>> import os >>> print os.environ ['PYTHONPATH'] Traceback(最近一次调用最后一次):文件“ <console>“,第1行,在<module>文件”C:\ Python25 \ lib \ os.py“,第435行, 的GetItem     return self.data [key.upper()] KeyError:'PYTHONPATH'>>> print os.environ.get('PYTHONPATH')无>>> // PLZ要继续... // - Amit Yadav
在第一种方式中,脚本抛出异常,而第二种方式抛出异常。那么,有没有办法让它有意义的价值或我做错了吗?艾米特。 - Amit Yadav
os.environ是一本字典。尝试访问字典中不存在的键将引发KeyError。当密钥不存在时,get方法只返回None。你有PYTHONPATH套装吗?你能尝试使用PATH等保证存在的变量吗?它是否返回有意义的值? - Rod
PYTHONPATH用于从Python外部向Python(sys.path)添加新的搜索路径。看一下 docs.python.org/using/cmdline.html#environment-variables - Rod
其实, os.environ作为字典,也可以使用它返回一个值 get 使用方法 os.environ.get("SOME_PARAMETER", "default_value") - sheba


检查密钥是否存在(返回 True/False

"HOME" in os.environ

或者(从python 3.x中删除)

os.environ.has_key("HOME")

你也可以使用 get() 打印钥匙时;如果您想使用默认值,则非常有用。     (对于python 2.7.3)

print os.environ.get('HOME','/home/username/')

哪里 /home/username/ 是默认值


131
2017-07-12 08:14



你应该用 in 代替 has_key。看到 stackoverflow.com/questions/1323410/has-key-or-in 而且, default 为简洁起见,可省略kwarg名称(os.environ.get('HOME', '/home/username'))。 - Danilo Bargen
哪个更好, "HOME" in os.environ 要么 os.environ.get('HOME')? - endolith
@endolith他们做了不同的事情。第一个返回True或False,而第二个返回一个值,可能是None。 - Trenton


最初的问题(第一部分)是“如何在Python中检查环境变量”。

以下是检查$ FOO是否设置的方法:

try:  
   os.environ["FOO"]
except KeyError: 
   print "Please set the environment variable FOO"
   sys.exit(1)

33
2018-03-29 13:58



os.environ中的“FOO” - ealfonso
尝试可以更快。 env vars的情况可能最适合“尝试”: stackoverflow.com/a/1835844/187769 - RandomInsano
@RandomInsano更快= / =更好。此代码看起来不像一个 "if 'FOO' not in os.environ: ..." 块 - Dangercrow
谢谢你提醒我'更好'是主观的 - RandomInsano


您可以使用访问环境变量

import os
print os.environ

尝试查看PYTHONPATH或PYTHONHOME环境变量的内容,这可能对您的第二个问题有所帮助。但是你应该澄清一下。


21
2018-02-05 13:07





至于环境变量:

import os
print os.environ["HOME"]

在你得到合适的答案之前,我担心你必须多一点充实你的第二点。


13
2018-02-05 13:07





import os
for a in os.environ:
    print('Var: ', a, 'Value: ', os.getenv(a))
print("all done")

这将打印所有环境变量及其值。


9
2018-03-28 15:46





在Python 3中:

#!/usr/bin/python3
import os
for param in os.environ.keys():
    print("%s: %s " % (param, os.environ[param]))

6
2018-02-21 11:16



甚至: for param, val in os.environ.items(): print("%s: %s " % (param, val)) - HagaiH
这也适用于Python 2.7。 - codeforester


如果您计划在生产Web应用程序代码中使用该代码,
使用任何像Django / Flask这样的Web框架,使用像 envparse使用它,您可以将值读取为您定义的类型。

from envparse import env
# will read WHITE_LIST=hello,world,hi to white_list = ["hello", "world", "hi"]
white_list = env.list("WHITE_LIST", default=[]) 
# Perfect for reading boolean
DEBUG = env.bool("DEBUG", default=False)

注意:kennethreitz的 autoenv 是制作项目特定环境变量的推荐工具,请注意那些正在使用的人 autoenv 请保持 .env 私人档案(公众无法访问)


6
2018-01-10 04:12





这是一个单行选项假设 进口口 已经完成:

for key in os.environ: print(key,':',os.environ[key])

或格式化:

for key in os.environ: print('{:>30} {:<4} {:}'.format(key,':',os.environ[key]))

2
2018-03-27 07:34





Actualy可能就是这样:

import os

for item, value in os.environ.items():
    print('{}: {}'.format(item, value))

或者简单地说:

for i, j in os.environ.items():
    print(i, j)

用于查看参数中的值:

print(os.environ['HOME'])

要么

print(os.environ.get('HOME')

设置值:

os.environ['HOME'] = '/new/value'

-1
2018-03-10 15:52



这在接受的答案中得到了解决。 - Litty
没有str.format没有人答案。 - britodfbr
不,这个答案实际上并没有在现有答案之上添加任何内容 - Bart