一尘不染

Python:在subprocess.Popen(..)中导出环境变量

python

我在致电时设置环境变量时遇到问题subprocess.Popen。似乎没有设置环境变量。关于如何为Python命令行调用正确设置环境变量的任何建议?

我的目标是运行一个使用从我的Python代码确定的环境变量的脚本:

d = dict(os.environ)
d["TEST_VARIABLE"] = str(1234)
subprocess.Popen('/usr/bin/mybinary', env=d).wait()

但是脚本的反应就像从未设置过变量一样

这是我尝试使用Python的交互式解释器进行测试:

d = dict(os.environ)
d["TEST_VARIABLE"] = str(1234)
subprocess.Popen(['/bin/echo', '$TEST_VARIABLE'], env=d).wait()

输出为:

"$TEST_VARIABLE"
0

我认为env=d应该为子流程设置环境,但是显然没有。有关如何更正此问题的任何建议?


阅读 214

收藏
2020-12-20

共1个答案

一尘不染

命令行上 环境变量的替换由外壳程序完成,而不是由/ bin / echo完成。因此,您需要在shell中运行命令以获取替换:

In [22]: subprocess.Popen('/bin/echo $TEST_VARIABLE', shell=True, env=d).wait()
1234
Out[22]: 0

但这并不意味着在时未设置环境变量shell=False。即使没有shell=True,可执行文件也会看到该参数设置的环境变量env。例如,dateTZ环境变量影响:

In [23]: subprocess.Popen(["date"], env={'TZ': 'America/New_York'}).wait()
Wed Oct 29 22:05:52 EDT 2014
Out[23]: 0

In [24]: subprocess.Popen(["date"], env={'TZ': 'Asia/Taipei'}).wait()
Thu Oct 30 10:06:05 CST 2014
Out[24]: 0
2020-12-20