子进程“ echo $ ENVIRONMENT_VAR”输出“ $ ENVIRONMENT_VAR”

时间:2018-10-18 12:56:28

标签: python bash

编写在Linux环境中运行的python程序。 在这种环境下,我无法使用paramiko等。

我编写了一系列与命令行交互的方法,其中有一个问题...

import subprocess

def echo(self, echo_arg):
  cmd = subprocess.Popen(["echo", echo_arg], stdout=subprocess.PIPE)
  return cmd.communicate()[0]

在Linux中,我有一个环境变量UPFW_WORK_PATH 以后再打...

self.echo("$UPFW_WORK_PATH") 

返回的控制台输出实际上是:

  

$ UPFW_WORK_PATH

但是当我在终端中输入...

echo $UPFW_WORK_PATH 

我已返回(不是实际的路径名):

  

/ example / file / path

是什么原因导致手动在终端上键入“ echo”和我的python方法通过子进程调用echo之间的差异

1 个答案:

答案 0 :(得分:2)

当您从外壳程序运行echo $x时,外壳程序会将变量扩展为其值。因此,例如,如果x的值为5,则echo收到的参数为5。它将永远不会知道该变量。

因此解决方案是在python程序中检索环境变量的值,并将该值传递给echo:

import subprocess
import os
echo_arg = os.environ['UPFW_WORK_PATH']
cmd = subprocess.Popen(["echo", echo_arg], stdout=subprocess.PIPE)