您将需要一个“loader”小程序,它将使用适当的变量调用第二个程序。
当然,在Python中使用它会更方便,因为所有的东西都已经设置好了,但是它可能会有一些变化#!/usr/bin/env python3
import subprocess
import sys
import yaml
config = yaml.load(open(sys.argv[1]))["data"]
# Instead of "data" here, use the yaml path to the place in the configuration your variables are
cmdline = sys.argv[2:]
if cmdline[0].endswith(".py"):
cmdline.insert(0, sys.executable)
result = subprocess.run(cmdline, env=config)
exit(result.returncode)
(当然,您需要安装一些第三方lib来读取yaml配置文件-我用PyYAML来测试这一点)
如果将上面的脚本标记为可执行,则可以直接在命令行中使用它,而不必加前缀“python3”—否则,如果将此文件命名为跑步者.py“您的命令行可以
^{pr2}$
如果您需要传递当前环境并使用脚本中的变量进行更新,请在.run调用之前执行以下操作:import os
...
config = yaml.load(...)[...]
config = {**os.environ, **config}
另外,请注意,它将使用运行在其上的同一个Python解释器来执行脚本,这或多或少有些幼稚(只检查文本“.py”文件扩展名)——如果您需要它更健壮,建议对目标脚本执行stat并检查它是否可执行,然后直接调用它,并且只对其他文件使用当前的Python解释器。在
或者修改你的代码
由于您只有一个脚本作为入口点,并且希望简化对第三方空间的运行,所以您可以更改它,而不是使用通用的加载程序-
在这种情况下,我建议添加一个额外的配置变量来表明变量已经被正确设置了—所以当脚本在其容器中运行时,它什么也不做—否则,它会像上面一样加载数据,并将其操作系统环境. 在
换句话说,在代码的入口点,执行以下操作:if not os.environ.get("EVERYTHING_SETUP"):
import yaml
config = yaml.load(open("myconfig.yaml"))["data"]
os.environ.update(config)