从 shell 脚本加载环境变量
Load environment variables from a shell script
我有一个文件,其中包含一些我想在 python 脚本中使用的环境变量
命令行下的作品
$ source myFile.sh
$ python ./myScript.py
并且从 python 脚本内部我可以访问像
这样的变量
import os
os.getenv('myvariable')
如何获取 shell 脚本,然后使用 python 脚本访问变量?
您通常不能从bash或shell脚本加载环境变量,这是不同的语言。您将不得不使用 bash 来评估文件,然后以某种方式打印出变量,然后读取它们。见 Forcing bash to expand variables in a string loaded from a file
如果你说的是后向环境传播,对不起,你不能。这是一个安全问题。但是,直接来自 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'
我有一个文件,其中包含一些我想在 python 脚本中使用的环境变量
命令行下的作品
$ source myFile.sh
$ python ./myScript.py
并且从 python 脚本内部我可以访问像
这样的变量import os
os.getenv('myvariable')
如何获取 shell 脚本,然后使用 python 脚本访问变量?
您通常不能从bash或shell脚本加载环境变量,这是不同的语言。您将不得不使用 bash 来评估文件,然后以某种方式打印出变量,然后读取它们。见 Forcing bash to expand variables in a string loaded from a file
如果你说的是后向环境传播,对不起,你不能。这是一个安全问题。但是,直接来自 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'