亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 PyYAML 從 Bash 查找 YAML 值

如何使用 PyYAML 從 Bash 查找 YAML 值

喵喔喔 2023-10-18 15:50:50
我正在測試在 RHEL7 環境中使用 PyYAML v3.12 來解析中等復雜的 YAML 配置文件內容的可行性,方法是向其提供密鑰并獲取密鑰對值。該查詢看起來像這樣python my_yaml_search.py key_to_search并打印回value,例如:所需的 bash 命令:python search_yaml.py $servername所需的響應(僅值,而不是鍵值):myServer14到目前為止,我已經創建了以下 .py:import sysimport yamlkey = 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"配置.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 庫,但是我在如何正確執行此操作方面遇到了障礙 -任何輸入都會挽救我的理智。
查看完整描述

1 回答

?
qq_花開花謝_0

TA貢獻1835條經驗 獲得超7個贊

如果您知道要遍歷的所有鍵,則可以執行以下操作:


import sys

import yaml


key = sys.argv[1]


with open("config.yml") as f:

    data = yaml.safe_load(f)

    n = key.count('.')

    parts = key.split('.')

    res = None

    i = 0

    while i <= n:

        try:

            if not res:

                res = data[parts[i]]

            else:

                res = res[parts[i]]

        except (yaml.YAMLError, KeyError) as exc:

            print ("Error: key not found in YAML")

            res = None

        i = i + 1

    if res:

        print(res)

測試

~# python search_yaml.py server.repo.port

~# 1234


~# python search_yaml.py server.servername

~# myServer14

這可能有錯誤,我編寫代碼只是為了看看是否可以在沒有第三方工具的情況下輕松完成。


適用于 YAML 的 CLI 應用程序

瀏覽本次作品的您可能還對程序感興趣yq。實際上有兩個同名的程序,一個是用 Go 實現的,另一個是基于 Python 的(可能比上面的代碼更復雜):-)


基于Go的yq. yq您可以從 GitHub 版本安裝提供的靜態編譯的二進制文件,也可以yum使用商業GetPageSpeed 存儲庫進行安裝,以便以后輕松更新:


sudo yum -y install https://extras.getpagespeed.com/release-latest.rpm

sudo yum -y install yq

然后你可以簡單地:


~# yq read config.yml server.servername

~# myServer14


查看完整回答
反對 回復 2023-10-18
  • 1 回答
  • 0 關注
  • 130 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號