从 python 脚本导入 shell 变量

Import shell variables from python script

我在 shell 脚本中有一组常量,仅供其他项目通过采购引入,即:

. /home/test/constants.sh`

source /home/test/constants.sh`

我现在需要让 scons 脚本可以访问这些值。我认为实现一次编写随处使用的最简单方法是:

  1. 将 shell 脚本转换为 python 脚本,以便 scons 可以直接导入它。
  2. 让 python 脚本生成带有适当变量的 shell 脚本,或者可能让 shell 脚本 execute/source python 脚本生成导入必要的变量。

shell 脚本从 python 脚本到 "import" 变量(即 key/value 对)的最佳方法是什么? python 脚本是否应该简单地具有将 key/value 对转储为字符串的函数,或者是否有更复杂的方法来保持 shell 脚本和 python 脚本充满常量同步?

此外,在未来,简单的 GNU Makefile 项目也可能需要这些变量。 shell 脚本和 Makefile "import" 变量都可以来自外部 script/program?

Questions: ... both shell scripts and Makefiles "import" variables from an external script/program?

使用最小的常见可能性,具有 key=value 对的配置文件。
这可以在 Python ScriptShell Script 中使用。

Note: Use own Namespace MY_PROJECT_ not to overwrite used Environment Vars.

constants

MY_PROJECT_ROOT=/home/test/

用法Shell Script

. /home/test/constants
echo $MY_PROJECT_ROOT
>>>/home/test/

用法Python Script

启动脚本:

#!/bin/bash
. /home/test/constants
python my_python_script.py

my_python_script.py:

print (os.environ['MY_PROJECT_ROOT'])
>>>/home/test/

您可以编辑 python 脚本并向其添加 . /home/test/constants,以便始终为所有 Python 脚本设置环境变量。

其次,您可以将 . /home/test/constants 添加到您的 bash.rc 不需要 额外导入,但需要重新启动您的 Shell 如果 . /home/test/constants 变化。