[英]Create Python CLI with select interface
我想創建一個帶有項目選擇界面的 Python CLI,允許用戶從列表中選擇一個項目。 就像是:
Select a fruit (up/down to select and enter to confirm):
[x] Apple
[ ] Banana
[ ] Orange
我希望用戶能夠使用向上/向下箭頭更改他們的選擇,然后按Enter
確認。
是否存在具有此功能的 Python 模塊? 我嘗試搜索但找不到我想要的東西。
select-shell Node.js 包完全符合我的要求。
pick Python 模塊做我想做的,但它使用 curses 並打開一個簡單的 GUI。 我想避免創建 GUI 並將所有輸出保留在終端中:這可能需要更新顯示在終端上的行。
我目前正在使用click ,但我認為它不支持此功能。 我不確定如何使用cmd
/ readline
准確地實現這種功能,如果有任何見解,我將不勝感激。
經過一番搜索,我找到了兩個滿足我需求的庫!
第一個是python-inquirer ,它是Inquirer.js的 Python 端口,是 Yeoman 等項目使用的 CLI 庫。 我發現這個庫有一個非常好的 API(建立在blessings之上)但在設計/功能方面缺乏潤色。
第二個(我將使用的)是whaaaaat ,Inquirer 的另一個 Python 端口。 這個庫提供的功能更接近原始的 Inquirer.js,這正是我所需要的。 但是,該 API 不如 python-inquirer 干凈。
例子:
python-inquirer
示例:
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)
對於簡單的選擇,您可以使用simple-term-menu包。 它簡單、小巧且不依賴於其他包。
例子:
from simple_term_menu import TerminalMenu
terminal_menu = TerminalMenu(["entry 1", "entry 2", "entry 3"])
choice_index = terminal_menu.show()
您提到點擊包,並提到您不確定如何實現此功能。 似乎選擇選項是實現單選題的預期方式。
生成的輸出不會像其他答案中提到的其他一些包那樣好。 然而,click 維護良好、活躍,並且在 UNIX 和 WIN 上都可以工作——如果您計划發布一個庫,這是關鍵參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.