从shell脚本加载环境变量

laf*_*erc 6 python bash shell environment-variables

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

以下工作形成命令行

$ source myFile.sh
$ python ./myScript.py
Run Code Online (Sandbox Code Playgroud)

从python脚本里面我可以访问变量之类的

import os
os.getenv('myvariable')
Run Code Online (Sandbox Code Playgroud)

我如何从python脚本中获取shell脚本,然后访问变量?

Jas*_* Hu 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)}
Run Code Online (Sandbox Code Playgroud)

然后你就拥有了你需要的一切source_env.

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

import os

for k, v in source_env.items():
    os.environ[k] = v
Run Code Online (Sandbox Code Playgroud)

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

export VAR1='see me'
VAR2='but not me'
Run Code Online (Sandbox Code Playgroud)