在python 3中使用子进程运行命令时使用ENV变量?

时间:2017-03-24 06:44:19

标签: python subprocess

我想要实现的是 - 运行并返回一些自动化脚本的输出,但我无法理解为什么我不能在我的脚本中使用ENV变量?

我正在努力实施的一个简单例子

import os
import subprocess as sp

cmd = [ 'echo', '$_TEST' ]
myenv = {**{'_TEST':"is it working?"}, **os.environ }
pipe  = sp.Popen( cmd, stdout=sp.PIPE, stderr=sp.PIPE, env=myenv  );
print( pipe.communicate() )

我做错了什么?

更新:得到正确答案后。

import os
import subprocess as sp

cmd = [ '/bin/echo', '$_TEST' ]
myenv = {**{'_TEST':"is it working?"}, **os.environ }
pipe  = sp.Popen( " ".join(cmd), stdout=sp.PIPE, shell=True, stderr=sp.PIPE, env=myenv  );
print( pipe.communicate()  )
  1. 需要提供一个shell参数shell=True(或提供其他shell的路径),shell我们需要评估我们的变量。

  2. list命令应替换为string(例如' / bin / echo $ _TEST')

1 个答案:

答案 0 :(得分:0)

环境变量的替换由shell执行,因此您的解决方案只打印原始文本。解决此任务的正确方法:

import os
import subprocess as sp

cmd = 'echo $_TEST'
myenv = {**{'_TEST':"is it working?"}, **os.environ }
pipe  = sp.Popen( cmd, shell=True, stdout=sp.PIPE, stderr=sp.PIPE, env=myenv  );
print( pipe.communicate() )