【发布时间】:2018-04-13 00:45:47
【问题描述】:
我正在尝试从应用程序中删除所有密码和机密。
为此,我使用了环境变量。我想避免将这些特定的东西放入~/.bashrc 或其他内置文件中。调用导出所需变量的特定脚本将是理想的。
原因是环境变量包含密码,我试图将它们隔离在所有代码之外,除了设置环境变量的环境脚本。
总结所需的流程:
- 启动 Python 应用程序
- 应用程序生成设置新环境变量的进程
- 应用从之前设置的环境变量中提取值
- 应用在进一步处理中使用这些值
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