#python
#python
Вопрос:
Я хотел бы выполнить действие после определенного вывода из PyInquirer. Идея состоит в том, чтобы иметь меню для выбора определенных элементов. При выборе элемента он должен запускать скрипт или другое действие. В этом примере я использовал print («okay») в качестве примера.
from __future__ import print_function, unicode_literals
from PyInquirer import style_from_dict, Token, prompt, Separator
from pprint import pprint
import os
style = style_from_dict({
Token.Separator: '#cc5454',
Token.QuestionMark: '#673ab7 bold',
Token.Selected: '#cc5454', # default
Token.Pointer: '#673ab7 bold',
Token.Instruction: '', # default
Token.Answer: '#f44336 bold',
Token.Question: '',
})
questions = [
{
'type': 'checkbox',
'message': 'Select a VIP build',
'name': 'F5 configuration build',
'choices': [
Separator('= VIPS ='),
{
'name': 'Nieuwe HTTP VIP'
},
{
'name': 'Nieuwe HTTPS VIP'
},
{
'name': 'Niewe VIP'
},
Separator('= Pools ='),
{
'name': 'Nieuwe Pool'
},
{
'name': 'Bestaande pool'
},
Separator('= Pool member ='),
{
'name': 'Nieuwe Pool Members'
},
{
'name': 'Bestaande Pool Members'
},
],
'validate': lambda answer: 'You must choose atleast one option.'
if len(answer) == 0 else True
}
]
answers = prompt(questions, style=style)
pprint(answers)
if answers == ("{'F5 configuration build': ['Nieuwe HTTP VIP']}"):
print("okay")
Итак,
if answers == ("{'F5 configuration build': ['Nieuwe HTTP VIP']}"):
print("okay")
Должно печататься нормально после выбора первого варианта, но этого не произошло.
Любой совет будет приветствоваться!
Изменить орфографию
Комментарии:
1. Что
answers
содержит? (Кажется, вы проверяете вывод). Кажется, единственная проблема в вашем коде заключается в том, что вашif
оператор оцениваетTrue
… Пожалуйста, держите свой вопрос коротким! Учитывая содержимоеanswers
(вы можете опубликовать это) иif
инструкцию, вы можете исключить / удалить весь приведенный выше код.2. Привет, ответы = приглашение (вопросы, стиль =style) выдадут в качестве результата: «{‘Сборка конфигурации F5’: [‘Новый HTTP VIP’]}». Итак, если это утверждение ответов верно, оно должно печататься нормально. Но он этого не делает.
3. Вы искали примеры в документации используемой вами библиотеки (PyInquirer)? То, что вы пытаетесь сделать, должно быть основной задачей!
4. Возможно, это
answers
на самом деле не строка (типstr
) — при ее печати она будет преобразована в строку, но проверка на равенство в таком случае не даст результатовTrue
. Вы можете сделатьprint(type(answers))
, чтобы проверить тип.5. Это ответ на сборку конфигурации F5, все, что после этого, не читается. Я думаю, что библиотека PyInquirer изменяет строку в том, что мы не можем видеть. Может быть, стоит выполнить это действие для отладки. Спасибо!
Ответ №1:
Имя должно быть значением, которое легче оценить, например, только «F5», пользователь его не увидит.
Это тип данных dict, вы должны получить к нему доступ через индекс.
answers = prompt(questions, style=style)
pprint(answers)
if answers.get('F5', []) == ['Nieuwe HTTP VIP']:
print("okay")