无法获取通过子流程导出的环境变量

时间:2018-10-23 11:16:57

标签: python linux subprocess

我有一个shell脚本,可以导出一些凭据。

BHUKRK848D:~ ranip.hore$ cat cred.ksh
export ORACLE_UID_MD="abcd"
export ORACLE_PWD_MD="welcome"

我正在尝试使用子进程从python脚本执行shell脚本,并且试图从python脚本使用os.environ获取导出的变量,所以无法检索它们。

下面是我正在执行的代码段:

BHUKRK848D:~ ranip.hore$ cat demo.py
import os
import subprocess
subprocess.call("sh cred.ksh",shell=True)
print(os.environ.get("ORACLE_UID_MD",None))

BHUKRK848D:~ ranip.hore$ python demo.py 
None

是由于在不同的进程中从脚本导出变量而从脚本中导出变量的原因吗?如果我从终端手动执行导出命令并运行python命令,则能够获取凭据。

1 个答案:

答案 0 :(得分:2)

环境变量由子流程向下继承,但不会向上传播到父流程。在子流程中设置环境变量不会影响父流程的环境变量。

您必须从文件中解析环境变量,而不是执行它。