我想要实现的是 - 运行并返回一些自动化脚本的输出,但我无法理解为什么我不能在我的脚本中使用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() )
需要提供一个shell参数shell=True
(或提供其他shell的路径),shell我们需要评估我们的变量。
list
命令应替换为string
(例如' / bin / echo $ _TEST')
答案 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() )