我有,我想在Python脚本负载环境变量
以下工作以命令行形式
$ source myFile.sh
$ python ./myScript.py
,并从Python内使用一些环境变量的文件剧本我可以像访问变量
import os
os.getenv('myvariable')
我怎么能源shell脚本,然后访问的变量,从与python脚本?
我有,我想在Python脚本负载环境变量
以下工作以命令行形式
$ source myFile.sh
$ python ./myScript.py
,并从Python内使用一些环境变量的文件剧本我可以像访问变量
import os
os.getenv('myvariable')
我怎么能源shell脚本,然后访问的变量,从与python脚本?
如果你说落后的环境传播,对不起,你不能。这是一个安全问题。但是,直接从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'
对于所有可能的环境变量值,这并不会正常工作 - env的输出不打算被明确地解析。 –
@CharlesDuffy true。有角落案件。实际处理它的一种可能的方式将需要另一个脚本来打印用'\ 0'分隔的'k = v'。 – HuStmpHrrr
确实。如果唯一需要支持的操作系统是Linux,那么甚至可以使用“cat/proc/self/environ”,它将发出完全相同的格式。 :) –
你可以不是加载环境变量一般来自bash或shell脚本,它是一种不同的语言。您将不得不使用bash来评估文件,然后以某种方式打印出变量并读取它们。见Forcing bash to expand variables in a string loaded from a file
你是什么意思?你的意思是你如何设置环境变量? – jonrsharpe
我想从python脚本中调用'source myFile.sh',然后访问变量 – lafferc
因此,您只是想知道如何从Python运行命令?你有没有试过搜索* *? *“加载环境变量”*看起来**完全附带**到你想要实现的目标。 – jonrsharpe