繁体   English   中英

subprocess.check_output不遵守环境变量

[英]subprocess.check_output not respecting environment variables

在使用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运行的。 但是第一个是您在回显未设置的变量时得到的结果。 那么为什么这不起作用呢? 或更可能是我在做什么错?

变量插值是Shell的功能。 没有外壳,您尝试echo的字符串实际上是$DUMMY

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

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

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

echo更好的测试用例是env ; 然后您会看到它实际上确实像您要求的那样设置了变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM