Python 对于Heroku环境变量,os.environ.get()返回None

Python 对于Heroku环境变量,os.environ.get()返回None,python,heroku,environment-variables,Python,Heroku,Environment Variables,我通过Heroku设置了一些环境变量来访问GrapheneDB实例。当我使用Heroku CLI命令Heroku config时,所有环境变量都会按预期返回 例如,“heroku config”返回: GRAPHENEDB\u螺栓密码:一些密码 GraphenedBuBolt\uURL:bolt://hobby-someletters.dbs.graphenedb.com:24786 GraphenedBu螺栓用户:AppNumber GraphenedBu URL:http://appnumb

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

例如,
“heroku config”
返回:

GRAPHENEDB\u螺栓密码:一些密码
GraphenedBuBolt\uURL:bolt://hobby-someletters.dbs.graphenedb.com:24786
GraphenedBu螺栓用户:AppNumber
GraphenedBu URL:http://appnumbers:some_password@hobby someletters.dbs.graphenedb.com:24789
NEO4J_REST_URL:GraphenedBu 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)
我已经尝试使用来自的解决方案 但当我执行命令时:
heroku配置:拉式--覆盖
CLI返回
config:pull不是heroku命令。

因为您正在执行一个命令(而不是
env
或类似的命令)来获取这些配置变量,这意味着它们很可能不在您的正常环境中,这意味着您无法通过
os.environ.get()
获取它们

您可以做的是从该命令的输出中提取它们(示例-Python2.7-假设它们出现在
stdout
,如果它们没有以相同的方式检查
stderr
):

注:

  • 示例是Python2.7
  • 它假设信息出现在
    stdout
    上,如果不检查
    stderr
    ,则以相同的方式进行检查
  • 您可能需要为
    heroku
    可执行文件使用完整路径,但不确定

这对我很有效——谢谢!但我不明白答案的第一段。我使用
heroku local
命令运行我的应用程序,您可能认为该命令会应用正确的环境,但它没有像我预期的那样填充
os.environ
。我的意思是
env | grep GRAPHENEDB
不会显示变量,这意味着它们不在环境中。事实上,我还希望heroku local设置环境并将其传递给应用程序发布。您的评论帮助我理解了这一点——谢谢。但是,我必须报告,答案中的解决方法在部署到Heroku的Python应用程序上失败,因为Heroku不允许使用shell命令。我仍然感到困惑,为什么我不能通过
os.environ
访问Heroku“config”变量。当你说变量“不在你的正常环境中”时,“正常环境”是什么意思?这些变量是在哪里定义的?对于像加载环境变量这样简单的事情,需要这样一种解决方法,这似乎真的很奇怪。@DarksteelPenguin:我指的是正常shell执行(通过.rc文件)设置的环境,如果您需要执行某个cmd将它们加载到环境中。
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