从python中调用源envvars

2024-03-28 22:43:22 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的djangosettings.py文件中,我想调用一个envvars.sh文件来导入诸如DB\u凭证之类的内容。我试着这样做:

if not os.environ.get('DB_PASSWORD'): 
    subprocess.call(['source', 'envvars.sh'])

DB_PASSWORD         = os.environ.get('DB_PASSWORD', '')

它从终端开始工作,执行$ source envvars.sh,但不是从python内部。还有别的办法吗


Tags: 文件pysource内容dbgetifos
1条回答
网友
1楼 · 发布于 2024-03-28 22:43:22

你不能像这里描述的那样做。但也许最好退一步问问你为什么要这么做

既然您使用了Django标记,我们是否可以假设您正在从其他进程(例如,apachewsgi应用程序)运行Django应用程序?然后,举个例子,您只需在/etc/apache2/envvars中定义这些变量,就可以在Apache进程中使用它们(从而在Django应用程序中使用这些代码)。类似地,在/etc/environment中定义变量可能会对您有所帮助。它只取决于应用程序的调用/部署结构

此外,将变量存储在.env文件中,并使用^{}之类的模块读取该文件(而不是对Shell脚本执行subpprocess调用,这是不安全的),并执行以下操作:

if not os.environ.get('DB_PASSWORD'): 
    import dotenv
    dotenv.read_dotenv(os.path.join(os.path.dirname(__file__), ".env"), True)

DB_PASSWORD = os.environ.get('DB_PASSWORD', '')

这也是个好办法。如果您使用的是Django,那么实际上可以在dev环境中的settings.py文件中初始化它

相关问题 更多 >