subprocess.check_输出不尊重环境变量

2024-09-29 21:34:05 发布

您现在位置:Python中文网/ 问答频道 /正文

在使用Pythonssubprocess模块时,我注意到似乎没有正确设置环境变量。下面是一个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运行的。但是第一个是你在回显未设置的变量时得到的结果。为什么这不起作用?或者更可能的是,我做错了什么?在


Tags: 模块inechoenvtrue示例outputcheck
1条回答
网友
1楼 · 发布于 2024-09-29 21:34:05

变量插值是一个shell特性;如果没有shell,您试图echo的字符串实际上就是$DUMMY。在

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

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

。。。或者想办法直接从Python传递列表中的第二个参数。在

一个比echo更好的测试用例是env;然后你可以看到它确实按照你的要求设置了变量。在

相关问题 更多 >

    热门问题