簡體   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