如何在python中使用同一shell中的脚本导出环境变量?

如何在python中使用同一shell中的脚本导出环境变量?,python,shell,scripting,operating-system,Python,Shell,Scripting,Operating System,我的django项目从环境变量获取凭据,现在我想自动化这个过程并将凭据存储在vault(hashivcorp)中。 我有一个python和shell脚本,它从API获取数据并将其作为环境变量导出,当我使用os.system命令运行它时,它会运行shell脚本,但当它在子进程中运行时,我无法访问主(父)进程/shell中的变量。唯一的方法是在settings.py文件中插入shell脚本。 有什么办法可以让我在主流程中得到这些吗? 附言:我确实尝试过寻源,但操作系统没有将其识别为命令 以下是我正在

我的django项目从环境变量获取凭据,现在我想自动化这个过程并将凭据存储在vault(hashivcorp)中。 我有一个python和shell脚本,它从API获取数据并将其作为环境变量导出,当我使用os.system命令运行它时,它会运行shell脚本,但当它在子进程中运行时,我无法访问主(父)进程/shell中的变量。唯一的方法是在settings.py文件中插入shell脚本。 有什么办法可以让我在主流程中得到这些吗? 附言:我确实尝试过寻源,但操作系统没有将其识别为命令

以下是我正在运行的代码:

import os

os.environ['ENV'] = 'Demo'
os.system('python3 /home/rishabh/export.py')

print(os.environ.get('RDS_DB_NAME'))
输出:

None

python文件shell脚本工作正常。

一种方法是在相同的过程中运行
export.py
,正如user1934428所建议的:

import os
import sys

os.environ['ENV'] = 'Demo'

sys.path.append('/home/rishabh/')
import export   # runs export.py in the same process

print(os.environ.get('RDS_DB_NAME'))
这假设在
export.py
中没有
\uuuuu name\uuuu=='\uuuuuuu main\uuuu'
检查


如果
export.py
与当前脚本位于不同的目录中,则只需使用
sys.path
行。

一种方法是按照用户1934428的建议,在相同的过程中运行
export.py

import os
import sys

os.environ['ENV'] = 'Demo'

sys.path.append('/home/rishabh/')
import export   # runs export.py in the same process

print(os.environ.get('RDS_DB_NAME'))
这假设在
export.py
中没有
\uuuuu name\uuuu=='\uuuuuuu main\uuuu'
检查


如果
export.py
与当前脚本位于不同的目录中,则只需要
sys.path
行。

为什么要将
export.py
作为子进程运行,而不是在主进程内运行?但是,如果您真的想这样做,您可以(在export.py内)创建一个文本文件,其中包含您感兴趣的环境变量及其值,然后在主脚本中处理该文件。我还建议您从问题中删除shell标记,因为它没有特定于shell的内容。我一直在寻找一种只以这种方式运行它的方法。为什么要将
export.py
作为子进程运行,而不是在主进程中运行?但是,如果您真的想这样做,您可以(在export.py内)创建一个文本文件,其中包含您感兴趣的环境变量及其值,然后在主脚本中处理该文件。我还建议您从问题中删除shell标记,因为它没有特定于shell的内容。我只是在寻找一种这样运行它的方法。我甚至没有想到我可以这样做。非常感谢你的帮助!:我甚至没有想到我可以这样做。非常感谢你的帮助!:D