gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 04:55:44 26 4
gpt4 key购买 nike

我通过 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() 方法访问这些环境变量时,所有三个打印语句都返回 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 --overwriteCLI 返回 config:pull 不是 heroku 命令。

最佳答案

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

你可以做的是从那个命令的输出中提取它们(示例 - python 2.7 - 假设它们出现在 stdout 上,如果它们不检查 stderr 同理):

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

注意事项:

  • 例子是python 2.7
  • 它假设信息在 stdout 上输出,如果没有检查 stderr,以同样的方式
  • 您可能需要使用 heroku 可执行文件的完整路径,不确定。

关于python - os.environ.get() 为 Heroku 环境变量返回 None,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47117758/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com