繁体   English   中英

采购文件以从python脚本中设置环境变量

[英]Sourcing a file to set environment variables from within a python script

在Ubuntu上运行,我有一个由其他人编写的python脚本,其运行方式如下:

python cool_script.py command line args

但是,此脚本需要设置一些环境变量才能运行。 因此,我在与python脚本相同的目录中创建了exports.sh ,如下所示:

export ENV1='foo'
export ENV2='bar'
export ENV3='baz'

这样运行:

$source exports.sh
$python cool_script.py command line args

效果很好。 但是,我的情况要复杂一些。 我需要在几个环境中运行此环境,其中ENV1,ENV2,ENV3的值必须不同。 我还想对cool_script.py的输出进行cool_script.py 所以我写了cool_script_wrapper.py ,看起来像这样:

# set environment variables
import os
exports_file = os.path.dirname(os.path.realpath(__file__)) + '/exports.sh'
os.system('source %s' % exports_file)
# run cool_script.py
os.system('python cool_script.py command line args')
# do some stuff to the output
...

我计划为需要在每个环境上运行的每个环境使用不同的exports.sh脚本,并始终将它们与主脚本保持在相同的目录中。 唯一的问题是这种“源”方法不起作用。 这些环境变量根本无法用于cool_script.py
搜寻Stack Overflow,我现在知道它不起作用,但是没有找到适合我需求的解决方案。 我不想将os.environ与硬编码的值一起使用,也不想解析导出文件。 我想我可以使包装器成为bash脚本而不是python,但我希望有更好的解决方案。 有任何想法吗?

问题出在试图调用内置bash的source命令中。 这应该工作:

import os
os.environ['ENV1'] = "foo"
os.system("python cool_script.py command line args")

与以下答案进行比较: 从subprocess.Popen调用“源”命令

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM