我有一个XML,它包含有关由我的python脚本设置到shell中的环境变量的信息。这里是XML的片段:Python,使用Popen时更改当前shell环境变量?
<envVar name='QTDIR'>/homeqt/libs.qt4/qt4.5.1</envVar>
<envVar name='MAKE'>which make</envVar>
这段代码的这一部分告诉我的python脚本设置环境变量QTDIR和MAKE。
我的关注点是如何设置上述变量。我知道,我可以使用os.environ设置环境变量,做这样的事情:
os.environ['QTDIR'] = "/homeqt/libs.qt4/qt4.5.1"
但我不能用它来设置我的make变量,我不得不执行命令“这使得 “(获取make可执行文件的路径)。我的目标是使用相同的方法/函数来设置每个变量。
所以,我认为做这样的事情:
Popen("QTDIR=/homeqt/libs.qt4/qt4.5.1 ; export QTDIR", shell=True, stdout=PIPE, stderr=PIPE)
Popen("MAKE=which make ; export MAKE", shell=True, stdout=PIPE, stderr=PIPE)
但如果我这样做,变量将只针对子集,而不是当前的shell。
所以,我的问题是,有没有办法做我想要的?我不想分析XML和做这样的事情:
(伪)
if QTDIR has normal value
os.environ['QTDIR'] = "/homeqt/libs.qt4/qt4.5.1"
if MAKE has value to be executed
p = Popen("which make", shell=True, stdout=PIPE, stderr=PIPE)
stdout, stderr = p.communicate()
os.environ['MAKE'] = stdout
你为什么不想要? – Amber
我们有非常复杂的bash shell脚本,如果其他人构建我们的产品,则需要大量的shell脚本。我想在XML中尽可能移动大量信息,并使python脚本调用从中提取的作业。我希望python脚本尽可能简单。这就是为什么。那么,有可能吗? – peterphonic
@peterphonic所以,你想有一些值得特别处理,但你不愿意在任何地方处理它们? – millimoose