运行在Ubuntu中设置环境变量,我有一个python脚本,由别人,它只是运行像这样写的:采购文件从一个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
仅提供环境变量。
搜索堆栈溢出,我现在明白,它不应该工作,但我没有找到任何适合我的需求的解决方案。我不想使用os.environ
与硬编码值,我不想解析出口文件。我想我可以使我的包装一个bash脚本而不是一个python,但我希望有一个更好的解决方案。有任何想法吗?
你为什么要通过环境变量这样做呢?为什么不让包装脚本导入*实际函数*并用适当的参数直接调用它们? – jonrsharpe
@jonrsharpe - 抱歉,但我不明白你的意思。你能否更详细地解释或举个例子? – soungalo
好吧,不是真的,因为你没有显示你正在谈论的程序的任何细节。但是,如果它的结构明智,你应该能够'从cool_script import useful_func'中,然后直接调用该函数,使用你放入环境并通过命令行传递的任何值。如果不清楚如何最好地与它进行交互,为什么不与写它的人交谈? – jonrsharpe