簡體   English   中英

使用選擇界面創建 Python CLI

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM