关于ZAKER 融媒体解决方案 合作 加入

python- 如何在 subprocess.Popen ( ) 中使用现有的 Env.

CocoaChina 10-23

脚本

在我的python脚本中 , 我需要使用 x 个可执行文件期望的命令行参数 , 将可执行文件作为子进程运行 .

例:

> EG 1:myexec.sh param1 param2

> EG 2:myexec.sh param1 $MYPARAMVAL

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

当参数是一个已知值 ( EG 1 ) 并已配置时 , 我的代码正在工作 , 但是期望参数可以是环境变量并如此配置 , 应在运行时进行解释 . ( EG 2 )

在下面的示例中 , 我将使用 echo 代替 myexec.sh 来演示该方案 .

这被简化以演示问题 . " cmdlst" 是从配置文件构建的 , 该文件可以是具有任意数量的参数和值 ( 可以是值或环境变量 ) 的任何脚本 .

test1.py

import subprocessimport oscmdlst = [ '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: raiseprint stdout_value

结果测试 1

python test1.py

– > param1 param2

test2.py

import subprocessimport oscmdlst = [ 'echo','param1','$PARAM' ] try: proc = subprocess.Popen ( cmdlst,stdout=subprocess.PIPE ) jobpid = proc.pid stdout_value, stderr_value = proc.communicate ( ) except ( OSError, subprocess.CalledProcessError ) as err: raiseprint stdout_value

结果测试 2

导出 PARAM = param2

回声 $PARAM

– > 参数 2

python test2.py

– > param1 $PARAM

考虑到 $PARAM 仅在运行时才知道 , 并且需要从当前环境中检索 , 因此我要求 Test 2 产生与 Test 1 相同的结果 .

我欢迎您的建议 .

最佳答案

您可以这样做:

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

要么:

cmdlist = [ 'echo','param1','$PARAM' ] proc = subprocess.Popen ( cmdlist,stdout=subprocess.PIPE, env={'PARAM':os.environ [ 'PARAM' ] )

以上内容由"CocoaChina"上传发布 查看原文
相关标签 echopython