【发布时间】:2017-05-18 20:45:44
【问题描述】:
我想将我的凭据保存在 gitignored 文件 (config_vars.env) 中。
然后我想开始我的项目并将这些凭据设置为环境变量,因为我的程序使用os.environ.get('DB_NAME') 等。
所以我希望在我的脚本运行时设置这些环境变量,然后在我的程序停止运行时删除。
我可以直接使用 python 或 bash 设置它们,然后在退出时取消设置它们。但这并不理想,因为如果我的程序崩溃,环境变量就会保留在那里。
理想情况下,我可以在虚拟环境中自动设置它们,仅对我的进程可用,并且当进程停止运行时,环境变量就消失了。
有没有办法在原生 python 中做到这一点?我已经研究过诸如 python 的 click 或 dotenv 之类的东西,但没有其他方法吗?
这是我目前所得到的:
import os
import subprocess
def bash_command():
#not good
#subprocess.Popen(cmd, shell=False, executable=".\git-bash.exe")
#os.popen('setenv a b')
subprocess.call("config_vars.sh", shell=False)
print(os.environ.get('DB_NAME')) # prints None because the env var dies with bash
import time
time.sleep(5) # delays for 5 seconds
bash_command()
而 config_vars.sh 是:
export ENV_FILE=env/config_vars.env
echo $DB_NAME
那个 echo 命令显示它有效,但是 bash 进程结束,删除了那个环境变量(或整个虚拟环境),python 进程继续,但无法访问它。
所以问题是:如何设置在我的 python 进程终止时终止的环境变量?
【问题讨论】:
-
DB_NAME 设置在哪里?
-
在文件 env/config_vars.env 中我认为是“export DB_NAME...”
-
DB_NAME 根本没有被脚本设置,除非你这样做
source env/config_vars.env。
标签: python bash environment-variables