Python PyInquirer — действие после ввода

#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")