os.environ.get()为Heroku环境变量返回None

时间:2017-11-05 03:02:08

标签: python heroku environment-variables

我通过Heroku设置了一些环境变量来访问GrapheneDB实例。当我使用Heroku CLI命令heroku config时,所有环境变量都按预期返回。

例如,"heroku config"返回:

GRAPHENEDB_BOLT_PASSWORD: some_password   
GRAPHENEDB_BOLT_URL:      bolt://hobby-someletters.dbs.graphenedb.com:24786
GRAPHENEDB_BOLT_USER:     appnumbers  
GRAPHENEDB_URL:           http://appnumbers:some_password@hobby-someletters.dbs.graphenedb.com:24789  
NEO4J_REST_URL:           GRAPHENEDB_URL

但是,当我尝试使用os.environ.get()方法访问这些环境变量时,所有三个print语句都返回None而不是heroku config返回的所需输出。这将向我表明Python环境无法访问Heroku环境变量。如何让python访问这些?

import os
from py2neo import Graph

graphenedb_url = os.environ.get('GRAPHENEDB_BOLT_URL')
graphenedb_user = os.environ.get("GRAPHENEDB_BOLT_USER")
graphenedb_pass = os.environ.get("GRAPHENEDB_BOLT_PASSWORD")

print(graphenedb_url)
print(graphenedb_user)
print(graphenedb_pass)

我尝试过使用Acess Heroku variables from Flask中的解决方案 但是当我执行命令时:     heroku config:pull --overwrite CLI返回     config:pull is not a heroku command.

1 个答案:

答案 0 :(得分:1)

因为您正在执行一个命令(env或类似的东西除外)来获取这些配置变量,这意味着它们很可能不在您的正常环境中,这意味着您无法通过{{1 }}

你可以做的是从那个命令的输出中提取它们(示例 - python 2.7 - 假设它们出现在os.environ.get()上,如果它们还没有检查stdout in同样的方式):

stderr

注意:

  • 示例是python 2.7
  • 它假设信息来自from subprocess import Popen, PIPE graphenedb_url = graphenedb_user = graphenedb_pass = None stdout, stderr = Popen(['heroku', 'config'], stdout=PIPE, stderr=PIPE).communicate() for line in stdout.split('\n'): split = line.split(':') if len(split) == 2: if split[0] == 'GRAPHENEDB_BOLT_URL': graphenedb_url = split[1].strip() elif split[0] == 'GRAPHENEDB_BOLT_USER': graphenedb_user = split[1].strip() elif split[0] == 'GRAPHENEDB_BOLT_PASSWORD': graphenedb_pass = split[1].strip() print graphenedb_url print graphenedb_user print graphenedb_pass ,如果不是以同样的方式检查stdout
  • 您可能需要使用stderr可执行文件的完整路径,不确定。