Создать Python CLI с выбранным интерфейсом
Я хотел бы создать Python CLI с интерфейсом выбора элемента, который позволяет пользователям выбирать элемент из списка. Что-то вроде:
Select a fruit (up/down to select and enter to confirm):
[x] Apple
[ ] Banana
[ ] Orange
Я бы хотел, чтобы пользователи могли менять свой выбор с помощью стрелок вверх / вниз и нажимать Enter
подтвердить.
Существует ли модуль Python с этой функциональностью? Я попытался найти, но не смог найти именно то, что хотел.
Пакет select-shell Node.js делает именно то, что я хочу.
Модуль Python pick делает то, что я хочу, но он использует проклятия и открывает простой графический интерфейс. Я хотел бы избежать создания графического интерфейса и сохранить весь вывод в терминале: это, вероятно, требует обновления строк, отображаемых на терминале.
В настоящее время я использую Click, но я не верю, что он поддерживает эту функцию. Я не уверен, как именно для ввода такого рода функции, используя cmd
/readline
и был бы признателен за любое понимание.
4 ответа
После небольшого поиска я нашел две библиотеки, которые отвечали моим потребностям!
Первым является python-inquirer, Python-порт Inquirer.js, библиотеки CLI, используемой такими проектами, как Yeoman. Я обнаружил, что у этой библиотеки действительно хороший API (построенный на благословениях), но ей не хватает полировки, когда дело доходит до дизайна / функций.
Второй (который я буду использовать) - это whaaaaat, еще один Python-порт Inquirer. Эта библиотека предлагает функциональность намного ближе к оригинальному Inquirer.js и именно то, что мне нужно. Однако API менее чистый, чем у python-inquirer.
Примеры:
python-inquirer
пример:
import os
import sys
import re
sys.path.append(os.path.realpath('.'))
from pprint import pprint
import inquirer
questions = [
inquirer.List('size',
message="What size do you need?",
choices=['Jumbo', 'Large', 'Standard', 'Medium', 'Small', 'Micro'],
),
]
answers = inquirer.prompt(questions)
pprint(answers)
whaaaaat
пример:
from whaaaaat import prompt, print_json, Separator
questions = [
{
'type': 'list',
'name': 'theme',
'message': 'What do you want to do?',
'choices': [
'Order a pizza',
'Make a reservation',
Separator(),
'Ask for opening hours',
{
'name': 'Contact support',
'disabled': 'Unavailable at this time'
},
'Talk to the receptionist'
]
},
{
'type': 'list',
'name': 'size',
'message': 'What size do you need?',
'choices': ['Jumbo', 'Large', 'Standard', 'Medium', 'Small', 'Micro'],
'filter': lambda val: val.lower()
}
]
answers = prompt(questions)
print_json(answers)
Еще несколько альтернатив библиотекам ввода форм командной строки:
Примечание. Я сопровождаю beaupy.
Для простого выбора вы можете использовать пакет simple-term-menu. Он простой, маленький и не зависит от других пакетов.
Пример:
from simple_term_menu import TerminalMenu
terminal_menu = TerminalMenu(["entry 1", "entry 2", "entry 3"])
choice_index = terminal_menu.show()
Вы упоминаете пакет щелчка и упоминаете, что не знаете, как реализовать эту функцию. Похоже, что варианты выбора - это предполагаемый способ реализации вопросов с одним выбором.
Сгенерированный вывод будет не таким хорошим, как в некоторых других пакетах, упомянутых в других ответах. Тем не менее, щелчок поддерживается в хорошем состоянии, активен и работает как в UNIX, так и в WIN - критических аргументах, если вы планируете выпустить библиотеку.