在python脚本中调用bash配置文件以设置环境变量

在python脚本中调用bash配置文件以设置环境变量,python,bash,operating-system,subprocess,Python,Bash,Operating System,Subprocess,我有一个文本文件,其中包含属于一组命令的所有路径,这些命令可以在bashscrpits中调用,它被称为progs.ini。 通常,当我想在bash脚本中调用此配置文件时,我使用以下命令 . progs.ini progs.ini包含如下内容: BIN=/bin/linux_64/ P_ANALYSE=${BIN}/analyse NPARA=1 现在,我想在python中使用我的部分代码,并尝试使用以下命令: import subprocess as S import os CMD='. p

我有一个文本文件,其中包含属于一组命令的所有路径,这些命令可以在
bash
scrpits中调用,它被称为
progs.ini
。 通常,当我想在bash脚本中调用此配置文件时,我使用以下命令

. progs.ini
progs.ini包含如下内容:

BIN=/bin/linux_64/
P_ANALYSE=${BIN}/analyse
NPARA=1
现在,我想在python中使用我的部分代码,并尝试使用以下命令:

import subprocess as S
import os
CMD='. progs.ini'
S.call([CMD],shell=True)
它不会返回任何错误消息,但无法识别
progs.ini

>>os.system('echo ${BIN}')

0

这不是关于设置一些类似于的环境变量。我想使用配置文件设置一些变量

您似乎正在使用Linux。在这种情况下,我倾向于在ini文件的末尾添加一个
cat/proc/$$/environ
。这将以易于解析的格式打印出所有键值对。这应该做到:

s = os.popen(". whatever.ini && cat /proc/$$/environ").read()
env_vars = {x[:x.find("=")]:x[x.find("=")+1:] for x in s.split("\00")[:-1]}
测试。这不起作用,但这确实起了作用:

s = os.popen(". ./whatever.ini && set").read()
env_vars = {x[:x.find("=")]:x[x.find("=")+2:-1] for x in s.split("\n")[:-1]}
print env_vars['hello']

子进程
操作系统
运行的shell进程是不相关的。它们没有任何共同的状态。@EtanReisner那么这与这个问题有什么关系呢?没有。我的意思是它们彼此无关。您已经有效地运行了
bash-c”。程序ini';bash-c'echo$BIN'
并想知道为什么变量不起作用。这两个命令不共享任何状态。它们不共享变量等。它们是完全不同的进程。@EtanReisner有没有任何方法可以设置这些变量,这些变量在我的python脚本中是一大堆的,而无需重新编写它们?