脚本运行时设置虚拟环境变量?

时间:2017-05-18 20:45:44

标签: python bash environment-variables

我想将我的凭据保存在gitignored的文件(config_vars.env)中。 然后,我想启动我的项目,并将这些凭据设置为环境变量,因为我的程序使用os.environ.get('DB_NAME')等。

所以我喜欢在脚本运行时设置的环境变量,然后在我的程序停止运行时删除。

我可以使用python或bash逐字设置它们,然后在退出时取消设置它们。但这并不理想,因为如果我的程序崩溃了环境变量就会留在那里。

理想情况下,我能够在虚拟环境中自动设置它们,仅对我的进程可用,并且当进程停止运行时,env vars就会消失。

有没有办法在本机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进程死亡时死亡的环境变量?

1 个答案:

答案 0 :(得分:3)

您必须捕获脚本的输出;孩子不能影响父母的环境,所以你需要某种形式的进程间通信。

value = subprocess.check_output("config_vars.sh", shell=False).lstrip('\n')