Python 在popen调用中展开/替换变量

Python 在popen调用中展开/替换变量,python,subprocess,popen,Python,Subprocess,Popen,我试图调用一些使用该环境的shell程序,并试图找出正确的方法。我归结为以下几点: import subprocess as sp p = sp.Popen(["echo","Hello","$FOO"], env = {"FOO":"42"}, stdout = sp.PIPE, shell = True) p.wait() print(p.communicate()) 当“shell”设置为True时,它会打印“('\n',None)”,当它设置为False时,它会打印“('Hello$

我试图调用一些使用该环境的shell程序,并试图找出正确的方法。我归结为以下几点:

import subprocess as sp

p = sp.Popen(["echo","Hello","$FOO"], env = {"FOO":"42"}, stdout = sp.PIPE, shell = True)
p.wait()
print(p.communicate())
当“shell”设置为True时,它会打印“('\n',None)”,当它设置为False时,它会打印“('Hello$FOO\n',None)”,但我希望它会打印一些类似“('Hello 43\n',None)”的内容。我做错了什么,还有更好的方法吗?

试试这个:

p = sp.Popen("echo Hello $FOO", env={"FOO":"42"}, shell=True)

输出应为“Hello 42”

以在父级中展开envvar:
os.path.expandvars($path也适用于windows”)
不要使用
stdout=PIPE
,除非稍后阅读
p.stdout
。删除
p.wait()
:如果子进程生成足够的输出来填充管道缓冲区,则可能会使程序死锁。在Windows(Win7,Python 3.4.4)上,只有
%FOO%
正确展开。