python和shell都可以读取的配置文件

Posted

技术标签:

【中文标题】python和shell都可以读取的配置文件【英文标题】:A configuration file that can be read by python and shell 【发布时间】:2013-01-04 16:06:49 【问题描述】:

我在同一个文件夹中有 python 脚本和 shell 脚本,它们都需要配置。我目前有一个 config.py 用于我的 python 脚本,但我想知道是否有可能有一个可以被 python 脚本和 shell 脚本轻松读取的单个配置文件。

谁能举例说明最适合python和shell读取的配置文件格式。

【问题讨论】:

我用过YAML,推荐一下。还有python-yaml 【参考方案1】:

保留“config.py”而不是“config.sh”会产生一些漂亮的代码。

config.py

CONFIG_VAR = "value"
CONFIG_VAR2 = "value2"

script.py

import config

CONFIG_VAR = config.CONFIG_VAR
CONFIG_VAR2 = config.CONFIG_VAR2

script.sh

CONFIG_VAR="$(python-c 'import config;print(config.CONFIG_VAR)')"
CONFIG_VAR2="$(python-c 'import config;print(config.CONFIG_VAR2)')"

另外,这比尝试像 Gilles 回答所要求的那样“在 Python 中模拟 Bash '源'”要清晰得多。

【讨论】:

【参考方案2】:

configobj lib 可以帮助解决这个问题。

from configobj import ConfigObj
cfg = ConfigObj('/home/.aws/config')
access_key_id = cfg['aws_access_key_id']
secret_access_key = cfg['aws_secret_access_key']

【讨论】:

我认为您应该在 ['aws_access_key_id'] 之前添加 []。类似 cfg[]['aws_access_key_id']【参考方案3】:

这在 shell 和 python 中都有效:

NUMBER=42
STRING="Hello there"

你还需要什么?

【讨论】:

我认为 OP 希望有一种不违反惯例的方法。 (即不要将文件作为文本文件打开或启动子进程或调用eval 这正是我一直在做的。我现在“需要”的是构建/嵌套配置。例如: BASE_DIR="/home/base" CONFIG_DIR="$BASE_DIR/config" 我怎样才能做到这一点,使其与 bash 和 Python 兼容并且不重复配置?这就是导致我提出这个问题的原因。【参考方案4】:

我认为最简单的解决方案是:

key1="value1"
key2="value2"
key3="value3"

在shell 中,您只需获取此 env 文件,在 Python 中,它很容易解析。

= 周围不允许有空格

对于 Python,请参阅这篇文章:Emulating Bash 'source' in Python

【讨论】:

以上是关于python和shell都可以读取的配置文件的主要内容,如果未能解决你的问题,请参考以下文章

无法从文件访问完整的 python 模块,但可以从 shell

Shell读取配置文件的方法

如何使用 Python 读取图像文件? [关闭]

SpringBoot 如何优雅读取配置文件?10分钟教你搞定

家庭版.net无法读取配置文件

求shell 读取一个日志文件的最后一行