【发布时间】:2021-01-22 00:16:12
【问题描述】:
我正在测试在 RHEL7 环境中使用 PyYAML v3.12 解析适度复杂的 YAML 配置文件内容的可行性,方法是为其提供一个密钥并返回密钥对值。查询看起来像这样python my_yaml_search.py key_to_search 并让它打印回value,例如:
所需的 bash 命令:python search_yaml.py $servername
所需响应(仅值,而非键值):myServer14
到目前为止,我已经创建了以下 .py:
import sys
import yaml
key = sys.argv[1]
with open("config.yml") as f:
try:
data = yaml.safe_load(f)
for k, v in data.items():
if data[k].has_key(key):
print data[k][v]
except yaml.YAMLError as exc:
print "Error: key not found in YAML"
config.yml:
---
server:
servername: myServer14
filename: testfile.zip
location: http://test-location/1.com
repo:
server_name_fqdn: server.name.fqdn.com
port: 1234
到目前为止,运行python search_yaml.py $servername 会产生list index out of range; python search_yaml.py servername 什么也没产生。
我是 Python/PyYAML 的新手,所以我假设我可能错误地将一个变量传递给程序,并且 sys 可能不是我需要的 Python 库,但是我在如何正确地做到这一点上遇到了障碍 -任何输入都会挽救我的理智。
【问题讨论】:
-
您好 MissCatAssTrophy,欢迎来到 Stack Overflow!你在使用 Python 2 吗?如果是这样,您可以编辑问题以反映这一点吗? (或者更好的是,考虑切换到使用 Python 3,因为 Python 2 现在基本上已经过时了)另外,当我尝试重现您的结果时,我从运行
python2 search_yaml.py servername得到一个TypeError。你真的没有输出吗? -
如果有多个/嵌套的键匹配输入怎么办?
-
顺便说一句,对于这个任务来说,一个愚蠢的 grep / awk 可能会比 yaml 解析更快、更容易。
-
听起来你正在重塑
yq。您是否有不想使用现有工具的原因?
标签: python bash shell rhel pyyaml