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'] 之前添加 [这在 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