在使用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运行的。但是第一个是您在回显未设置的变量时得到的结果。那么为什么这不起作用呢?或更可能是我做错了什么?
答案 0 :(得分:3)
变量插值是一个外壳功能;没有外壳,您尝试echo
的字符串实际上就是$DUMMY
。
您可以添加shell=True
,然后当然将第一个参数更改为字符串而不是列表;
subprocess.check_call('echo "$DUMMY"', env={"DUMMY": "321"}, shell=True)
...或找出直接从Python传递列表中第二个参数的方法。
比echo
更好的测试用例是env
;然后您会看到它实际上确实像您要求的那样设置了变量。