如何访问环境变量值?


Answers:


3158

通过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))

Windows上的Python默认安装C:\Python。如果要在运行python时查找,可以执行以下操作:

import sys
print(sys.prefix)

1
您好,谢谢您对“默认安装”的有效回复;以有效的观点快速了解它,而不是通过链接查看。我真的很感激:),但是关于我的(1)问题,请查看下面的命令并输出代码片段:>>> import os >>> print os.environ ['PYTHONPATH'] Traceback(最近一次调用是最近一次):File“ <console>”,<模块>文件中的第1行,“ C:\ Python25 \ lib \ os.py”,第435行,在getitem中 返回self.data [key.upper()] KeyError:'PYTHONPATH'>>>打印os.environ.get('PYTHONPATH')无>>> // PLZ待续... //
阿米特·亚达夫

在第一种方式中,脚本抛出Exception,而第二种方式则抛出None。因此,有什么方法可以获取有意义的价值,或者我做错了吗?阿米特
阿米特·亚达夫

7
os.environ是一本字典。尝试访问字典中不存在的键将抛出KeyError。当键不存在时,get方法仅返回None。您设置了PYTHONPATH吗?您可以尝试使用肯定存在的变量(例如PATH)吗?它返回有意义的值吗?
Rod

2
PYTHONPATH用于从Python外部向Python(sys.path)添加新的搜索路径。看看docs.python.org/using/cmdline.html#environment-variables
Rod

11
.get()也可以设置为默认值。
Gringo Suave

242

检查密钥是否存在(返回TrueFalse

'HOME' in os.environ

您也可以get()在打印密钥时使用。如果要使用默认值,则很有用。

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

/home/username/默认位置在哪里


3
哪个更好,"HOME" in os.environ还是os.environ.get('HOME')
endlith '02

11
@endolith他们做不同的事情。第一个返回True或False,第二个返回值,可能为None。
特伦顿

@endolith,正确的问题woud是"HOME" in os.environVS os.environ.get('HOME') is None。如您所见,使用它更具可读性和舒适性。
康斯坦丁·塞克雷什

58

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

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

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

66
os.environ中的“ FOO”
ealfonso 2013年

4
尝试可以更快。env vars的情况最适合“尝试”:stackoverflow.com/a/1835844/187769
RandomInsano

13
@RandomInsano更快= / =更好。此代码看起来比"if 'FOO' not in os.environ: ..."块可读性差
Dangercrow

44

您可以使用以下命令访问环境变量

import os
print os.environ

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


29

至于环境变量:

import os
print os.environ["HOME"]

恐怕您可能还需要再充实一点,才可以得到一个不错的答案。


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

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


27

实际上,可以这样做:

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'

4
不,这个答案实际上并没有在现有答案之上添加任何内容
Bart

1
这应该删除,它是其他答案的重复。str.format只是一个花哨的补充。
connectyourcharger

>>> import os, pprint; pprint.pprint(list(os.environ.items()))
noobninja

18

如果您打算在生产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文件私有(不可访问)


11

还有很多很棒的图书馆。例如,Envs允许您从环境变量rad中解析对象。例如:

from envs import env
env('SECRET_KEY') # 'your_secret_key_here'
env('SERVER_NAMES',var_type='list') #['your', 'list', 'here']

3

对于django,请参阅(https://github.com/joke2k/django-environ

$ pip install django-environ

import environ
env = environ.Env(
# set casting, default value
DEBUG=(bool, False)
)
# reading .env file
environ.Env.read_env()

# False if not in os.environ
DEBUG = env('DEBUG')

# Raises django's ImproperlyConfigured exception if SECRET_KEY not in os.environ
SECRET_KEY = env('SECRET_KEY')

0

您也可以尝试

一,安装 python-decouple

pip install python-decouple

将其导入您的文件

from decouple import config

然后获取env变量

SECRET_KEY=config('SECRET_KEY')

在此处阅读有关python库的更多信息

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.