我想将我的凭据保存在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进程死亡时死亡的环境变量?
答案 0 :(得分:3)
您必须捕获脚本的输出;孩子不能影响父母的环境,所以你需要某种形式的进程间通信。
value = subprocess.check_output("config_vars.sh", shell=False).lstrip('\n')