从.sh脚本获取环境变量并在我的Python脚本中使用它们

时间:2017-03-14 19:05:33

标签: python bash shell

这就是我想要做的。

我有一个A.sh脚本,其中包含导出它们的环境变量(例如export AEnv==1234)。

然后我有B.sh调用A.sh:

SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
ROOT_DIR="$SCRIPT_DIR/.."

. ${SCRIPT_DIR}/A.sh

然后我有一个.bat脚本,我执行B.sh.在它下面我执行我的Python脚本。在我的Python脚本中,我正在寻找环境变量AEnv。但它给了我以下错误:

File "C:\Python27\lib\os.py", line 425, in __getitem__
return self.data[key.upper()]
KeyError: 'AEnv'

我正在使用os.environ['AEnv']

据我所知,当B.sh完成后,环境变量不再存在,因此失败。

我错过了什么?

2 个答案:

答案 0 :(得分:0)

我不确定 bat script 的含义,但无论如何,你必须处理两个问题:

(1)虽然您基本上可以以您喜欢的任何方式命名环境变量,但您应该仅使用大写字母,以避免可移植性问题。也就是说,您的环境变量应命名为AENV。

(2)正确识别后,您无法将环境变量从一个进程“传输”到另一个进程,除非另一个进程是设置环境变量的进程的子进程。因此,您需要将值存储在其他位置。以下三种可能性是常见的方法:

  • 定义环境变量值的过程可以将名称和值输出到stdout。调用脚本捕获输出并在其自己的环境中设置变量。调用Python脚本时,变量将在那里。

  • 生成脚本将环境变量的值写入文件,Python程序从文件中提取它。

  • “继续传递样式”:主脚本调用A.sh Python程序,但只调用A.sh,并传递调用Python进程到A.sh的行(作为参数或通过环境)。 A.sh设置环境,调用Python程序,并将Python程序的退出代码传递给调用者。

答案 1 :(得分:0)

export AEnv==1234更改为export AEnv=1234 bat-file永远不会知道A.sh.的环境设置。 尝试从B.sh调用您的Python:

SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
ROOT_DIR="$SCRIPT_DIR/.."

. ${SCRIPT_DIR}/A.sh

echo "After calling A.sh: AEnv=${AEnv}"

python C/Python27/lib/os.py