如何在程序运行中途更新.env变量并使其即时生效?
解决脚本中途更新.env变量并即时生效的方法
dotenv.set_key只会修改磁盘上的.env文件内容,但不会自动同步到当前Python进程的环境变量中,而os.getenv读取的是当前进程的环境变量,而非实时从文件读取。要让新值即时生效,需手动更新进程环境变量,修改后的代码如下:
import os from dotenv import find_dotenv, load_dotenv, set_key def changeSecret(slices, envvars, num): key = sign(slices) # 解密数据片段并合并成密钥 dotenv_file = find_dotenv() load_dotenv(dotenv_file) # 修改.env文件中的值 set_key(dotenv_file, 'secret', str(num)) # 手动更新当前进程的环境变量,让os.getenv能立即获取新值 os.environ['secret'] = str(num) # 此时encrypt函数调用os.getenv('secret')会拿到更新后的数值 slices = encrypt(key) updateenv(slices, envvars) # 更新其他变量
核心说明
dotenv.set_key仅负责修改磁盘文件,不影响当前运行进程的环境变量。- 通过
os.environ['secret'] = str(num)直接修改进程环境变量,后续所有读取该变量的操作都会立即使用新值。 - 只要
encrypt函数内部是通过os.getenv读取变量,而非重新加载.env文件,上述修改就能解决问题。
内容的提问来源于stack exchange,提问作者Ilan Katz
相关产品推荐
相关产品推荐

