【问题标题】:Launching script to export environment variables from Python启动脚本以从 Python 导出环境变量
【发布时间】:2018-04-13 00:45:47
【问题描述】:

我正在尝试从应用程序中删除所有密码和机密。

为此,我使用了环境变量。我想避免将这些特定的东西放入~/.bashrc 或其他内置文件中。调用导出所需变量的特定脚本将是理想的。

原因是环境变量包含密码,我试图将它们隔离在所有代码之外,除了设置环境变量的环境脚本。

总结所需的流程:

  1. 启动 Python 应用程序
  2. 应用程序生成设置新环境变量的进程
  3. 应用从之前设置的环境变量中提取值
  4. 应用在进一步处理中使用这些值

testpy.py 的内容

#!/usr/bin/env python

import os
import subprocess

env_file='/tmp/env_file'
db_pass_var='DBPASS'

#execute bash script that sets the env vars
subprocess.call([".", env_file], shell=True)

#try to get the variable set and print it
print os.getenv(db_pass, 'fail')

/tmp/env_file 的内容

#!/usr/bin/env bash

export DBUSER="myuser"
export DBPASS="mypass"

我尝试了各种方法,例如在其他 stackoverflow 线程上找到的 subprocess.Popen 命令,但似乎没有任何效果。

我想避免的替代方案:

  • 首先运行 env_file 脚本,然后启动 python 代码。目标是从 1 个应用程序运行它。

  • 将密码放入配置文件。目标是环境变量。我想保留的配置文件指向要调用的变量,而不是自己设置环境变量。这是因为配置文件已签入源代码管理。我唯一想离开源代码控制的是实际的export 环境变量本身,其中包含所有敏感的环境信息。

【问题讨论】:

  • 进程的父进程永远无法看到对环境变量的更改,因此您想做的事情无法进行。
  • 我想我必须在主应用程序运行之前在别处设置环境。我需要一个与语言无关的工作流程来处理这类事情,这听起来像是在应用程序启动之前(而不是在启动期间)设置用户环境配置文件是唯一的方法。

标签: python bash environment-variables


【解决方案1】:

有一个更简单的方法。只需提供一个设置环境变量的包装脚本,然后调用您的主脚本。

为此使用envdir 实用程序很方便。如果由于某种原因你不能使用它,那么直接使用os.environ 设置环境变量并将你的主脚本作为子进程生成。

【讨论】:

  • 感谢您的信息。我认为包装它将是唯一的方法。问题是这对我的团队来说只是一种“概念验证”方法,因为我的任务是开发一种从代码中隐藏秘密的方法。团队在我们的应用程序中使用 node.js、Python 和 Java,并希望找到一种统一的方式来处理所有事情,这使得 envdir 不可能。
  • envdir 是一个命令行应用程序,可用于启动您提到的任何环境。无处不在。
  • 谢谢。我只是在阅读它,它看起来像一个 Python pip 包,但我看到这只是一个端口。非常感激。如果没有其他提示,我会在一两天内将此标记为已接受的答案。
  • envdir 运行良好。将此标记为答案
  • 这是一个很棒的工具。请参阅envshellenvconsul,了解不同部署模型中的相同想法。
猜你喜欢
  • 2020-07-20
  • 1970-01-01
  • 2016-03-01
  • 2012-10-26
  • 1970-01-01
  • 2012-01-19
  • 1970-01-01
  • 2016-12-08
相关资源
最近更新 更多