【发布时间】:2016-12-17 12:20:10
【问题描述】:
在 Ubuntu 上运行,我有一个 python 脚本,由其他人编写,运行如下:
python cool_script.py command line args
但是,此脚本需要设置一些环境变量才能运行。所以我创建了exports.sh,位于与python脚本相同的目录中,看起来像:
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_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,但我希望有更好的解决方案。有什么想法吗?
【问题讨论】:
-
你为什么要通过环境变量来做这个?为什么不让包装脚本导入实际函数并使用适当的参数直接调用它们?
-
@jonrsharpe - 对不起,但我不明白你的意思。能否详细解释或举个例子?
-
不是真的,因为您没有显示您正在谈论的程序的任何细节。但是,如果它的结构合理,您应该能够
from cool_script import useful_func,然后使用您已放入环境并通过命令行传递的任何值直接调用该函数。如果不清楚如何最好地与它互动,为什么不与编写它的人交谈? -
我为什么要这样做?我希望cool_script.py 按原样运行,从头到尾。无论如何,我仍然不明白这将如何解决我的问题。
-
1.为什么?请给出一些上下文。 2. 完全消除问题,因为您不需要设置环境变量。
标签: python environment-variables