从shell脚本加载环境变量

时间:2015-06-29 13:54:24

标签: python bash shell environment-variables

我有一个文件,其中包含一些我想在python脚本中使用的环境变量

以下工作构成命令行

$ source myFile.sh
$ python ./myScript.py

从python脚本里面我可以访问像

这样的变量
import os
os.getenv('myvariable')

如何从shell脚本获取源代码,然后使用python脚本访问变量?

2 个答案:

答案 0 :(得分:9)

如果你说落后的环境传播,抱歉,你不能。这是一个安全问题。但是,python的直接源环境肯定是有效的。但它或多或少是一个手动过程。

import subprocess as sp

SOURCE = 'your_file_path'
proc = sp.Popen(['bash', '-c', 'source {} && env'.format(SOURCE)], stdout=sp.PIPE)

source_env = {tup[0].strip(): tup[1].strip() for tup in map(lambda s: s.strip().split('=', 1), proc.stdout)}

然后您在source_env中拥有所需的一切。

如果您需要将其写回当地环境(不建议这样做,因为source_env会让您保持清洁):

import os

for k, v in source_env.items():
    os.environ[k] = v

这里需要付出另一个微小的关注,因为我在这里打电话给bash,你应该期望这里也适用规则。因此,如果您希望看到变量,则需要将其导出。

export VAR1='see me'
VAR2='but not me'

答案 1 :(得分:-2)

您可以通常从bash或shell脚本加载环境变量,它是一种不同的语言。您将不得不使用bash来评估文件,然后以某种方式打印出变量然后读取它们。见Forcing bash to expand variables in a string loaded from a file