启动脚本以从Python导出环境变量
我正在尝试删除应用程序中的所有密码和机密。 为此,我使用了环境变量。我希望避免将这些特定内容放入启动脚本以从Python导出环境变量,python,bash,environment-variables,Python,Bash,Environment Variables,我正在尝试删除应用程序中的所有密码和机密。 为此,我使用了环境变量。我希望避免将这些特定内容放入~/.bashrc或其他内置文件中。最好调用导出所需变量的特定脚本 这是因为环境变量包含密码,我试图将它们隔离在所有代码之外,设置环境变量的环境脚本除外 总结所需流程: 启动Python应用程序 应用程序生成设置新环境变量的进程 应用程序从以前设置的环境变量中提取值 应用程序在进一步处理中使用这些值 testpy.py的内容 /tmp/env_文件的内容 我在其他stackoverflow线程上找到了
~/.bashrc
或其他内置文件中。最好调用导出所需变量的特定脚本
这是因为环境变量包含密码,我试图将它们隔离在所有代码之外,设置环境变量的环境脚本除外
总结所需流程:
subprocess.Popen
命令,但似乎都不起作用
我想避免的备选方案:
- 首先运行env_文件脚本,然后启动python代码。我们的目标是从一个应用程序运行它
- 将密码放入配置文件。目标是环境变量。我想保留的配置文件指向要调用的变量,而不是设置env变量本身。这是因为配置文件已签入源代码管理。我想在源代码管理之外省去的唯一一件事是实际的
环境变量本身,它包含所有敏感的环境信息export
- 有一个更简单的方法。只需提供一个包装器脚本来设置环境变量,然后调用主脚本
为此,使用
envdir
实用程序很方便。如果出于某种原因不能使用它,那么直接使用os.environ
设置env vars,并将主脚本作为子进程生成 进程的父进程永远看不到对环境变量的更改,因此您想做的事情无法工作。我想我必须在主应用程序运行之前在其他地方设置环境。我需要一个与语言无关的工作流程来处理这类事情,听起来只有在应用程序启动之前(而不是启动期间)设置用户环境配置文件才是唯一的方法。谢谢您提供的信息。我认为包装它将是唯一的方法。问题是,对于我的团队来说,这只是一种“概念验证”方法,因为我的任务是开发一种对代码隐藏秘密的方法。该团队在我们的应用程序中使用node.js、Python和Java,并希望找到一种统一的方法来跨所有应用程序执行此操作,这使得envdir
成为不可能。envdir
是一个命令行应用程序,可用于启动您提到的任何环境。到处都能用,谢谢。我正在阅读它,它看起来像一个Python pip包,但我看到它只是一个端口。非常感谢。如果没有其他弹出消息,我会在一两天内将此标记为已接受的答案。envdir
工作正常。将此标记为答案这是一个很好的工具。请参见envshell
和envaccour
,了解不同部署模型中的相同想法。
#!/usr/bin/env python
import os
import subprocess
env_file='/tmp/env_file'
db_pass_var='DBPASS'
#execute bash script that sets the env vars
subprocess.call([".", env_file], shell=True)
#try to get the variable set and print it
print os.getenv(db_pass, 'fail')
#!/usr/bin/env bash
export DBUSER="myuser"
export DBPASS="mypass"