Не обязательно лучше, но так как хорошо иметь варианты, вот как это сделать, используя заявления Jinja :
- debug:
msg: "{% for address in network.addresses.private_man %}\
{% if address.type == 'fixed' %}\
{{ address.addr }}\
{% endif %}\
{% endfor %}"
Или, если вы предпочитаете ставить все на одном line:
- debug:
msg: "{% for address in network.addresses.private_man if address.type == 'fixed' %}{{ address.addr }}{% endfor %}"
Возврат:
ok: [localhost] => {
"msg": "172.16.1.100"
}
Я начался с превосходным ответом @chander, но сталкивался с проблемами с выходом специального символа, и на уровне оболочки/команды и в рамках сценария Python. Сохранение JSON
в файл и затем передача того имени файла в качестве параметра к сценарию были бы возможным решением, но в моей ситуации, которая была скорее сложной.
Так вместо этого я решил к URL, кодируют строку на уровне аргумента и декодируют его в Python
сценарий. Это означает, что тому независимо от того, что называет сценарий Python, нужно к URL - кодируют параметр командной строки, который является эти JSON
строка. Существуют многочисленный сетевые инструменты , которые позволяют Вам поиграть в песочнице с кодированием URL строку. В моем случае nodejs
сценарий вызывает вызов сценария Python, и может легко URL кодировать JSON
.
Внутренняя часть Python
сценарий, это похоже на это (Вы не должны использовать argparse
, но мне нравится он):
import json
import argparse
from urllib.parse import unquote
# Set up CLI Arguments
parser = argparse.ArgumentParser()
# Required Arguments
parser.add_argument("-c", "--config", required=True,
help="JSON configuration string for this operation")
# Grab the Arguments
args = parser.parse_args()
jsonString = unquote(args.config)
print(jsonString)
config = json.loads(jsonString)
print(config)