subprocess.check_output不尊重环境变量

问题描述 投票:0回答:1

使用Pythons subprocess模块时,我注意到它似乎没有正确设置环境变量。以下是来自IPython会话的示例,显示了以下内容:

In [21]: subprocess.check_output(["echo", "$DUMMY"], env={"DUMMY" : "321"}, shell=True)
Out[21]: b'\n'

In [22]: subprocess.check_output(["echo", "$DUMMY"], env={"DUMMY" : "321"})
Out[22]: b'$DUMMY\n'

我知道第二个不起作用,因为它不是由shell运行的。但第一个是在回显未设置的变量时得到的结果。那为什么这不起作用?或者更可能的是,我做错了什么?

python subprocess environment-variables
1个回答
3
投票

变量插值是一个shell特征;没有壳,你试图echo的字符串只是字面上$DUMMY

您可以添加shell=True,然后当然将第一个参数更改为字符串而不是列表;

subprocess.check_call('echo "$DUMMY"', env={"DUMMY": "321"}, shell=True)

...或者想出一种直接从Python传递列表中第二个参数的方法。

echo更好的测试用例是env;那么你可以看到它确实设置变量就像你问的那样。

© www.soinside.com 2019 - 2024. All rights reserved.