如何在中使用现有的环境变量子流程.Popen()

2024-07-04 05:52:05 发布

您现在位置:Python中文网/ 问答频道 /正文

场景

在我的python脚本中,我需要将一个可执行文件作为一个子进程运行,该子进程包含可执行文件所期望的x个命令行参数。在

示例:

  • 例1:myexec.sh公司参数1参数2
  • 例2:myexec.sh公司参数1$MYPARAMVAL

可执行文件和参数未知,因为它们是在运行时从外部源(xml config)配置和检索的。在

我的代码在参数是已知值(例如1)并进行了配置时工作,但是期望参数可以是环境变量并配置为环境变量,这应该在运行时进行解释

在下面的示例中,我使用echo作为myexec.sh公司演示场景。 这是为了证明这个问题“cmdlst”是从配置文件生成的,该文件可以是具有任意数量的参数和值(可以是值或环境变量)的任何脚本。在

test1.py

import subprocess
import os

cmdlst = ['echo','param1','param2']

try:
    proc = subprocess.Popen(cmdlst,stdout=subprocess.PIPE)
    jobpid = proc.pid
    stdout_value, stderr_value = proc.communicate()
except (OSError, subprocess.CalledProcessError) as err:
    raise

print stdout_value

结果测试1

python test1.py

-->param1参数2

test2.py

^{pr2}$

结果测试2

导出参数=param2回显$PARAM

-->;参数2 python test2.py

-->;参数1$PARAM

考虑到$PARAM只在运行时已知,并且需要从当前环境中检索,我需要test2生成与test1相同的结果。在

我欢迎你的建议。在


Tags: py可执行文件参数paramvalueshstdout环境变量
3条回答

不能使用$VAR访问环境变量。您应该改为使用os.environ[..]

cmdlst = ['echo','param1',os.environ['PARAM']]

如果要让shell展开环境变量,必须设置shell=True

subprocess.Popen('echo param1 $PARAM', shell=True, stdout=subprocess.PIPE)

或者,您可以在构造命令时自己查询环境变量,然后就不需要shell扩展了

^{pr2}$

你可以:

cmdlist = ['echo','param',os.environ["PARAM"]]

或者:

^{pr2}$

相关问题 更多 >

    热门问题