使用选择界面创建 Python CLI

2024-03-28

我想创建一个带有项目选择界面的 Python CLI,允许用户从列表中选择项目。就像是:

Select a fruit (up/down to select and enter to confirm):
[x] Apple
[ ] Banana
[ ] Orange

我希望用户能够使用向上/向下箭头更改他们的选择,然后按Enter确认。

是否存在具有此功能的 Python 模块?我尝试搜索但找不到我想要的东西。

The 选择 shell Node.js 包 https://www.npmjs.com/package/select-shell正是我想要的。

The 选择Python模块 https://github.com/wong2/pick做我想要的,但它使用curses并打开一个简单的GUI。我想避免创建 GUI 并将所有输出保留在终端中:这可能需要更新显示到终端的行。

我目前正在使用click http://click.pocoo.org/5/但我不相信它支持此功能。我不确定如何使用来实现这种功能cmd/readline并将不胜感激任何见解。


经过一番搜索,我找到了两个满足我需求的库!

第一个是python 询问者 https://github.com/magmax/python-inquirer,Python 端口询问者.js https://github.com/SBoudrias/Inquirer.js/,Yeoman 等项目使用的 CLI 库。我发现这个库有一个非常好的 API(构建在祝福 https://pypi.python.org/pypi/blessings/)但在设计/功能方面缺乏完善。

第二个(我将使用的)是whaaaaat https://github.com/finklabs/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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用选择界面创建 Python CLI 的相关文章

  • 使用 setup.py 编译 python 应用程序

    我已经指出了将 pygame 导出到可执行文件以进行分发的问题 我仍然有一个问题 当我运行 setup py 我使用 python 版本 3 7 0 并构建应用程序时 应用程序直接崩溃 我也无法打开 unix 可执行文件 这正是我到目前为止
  • 使用 pandas 在不同轴上绘制条形图和时间序列图

    我有一个 pandas 数据框 它是从具有以下结构的 csv 文件中读取的 Date Latitude Longitude Brand Pump AKI Trip Miles Total Miles Gallons MPG PPG Tota
  • Kafka 一遍又一遍地重放消息 - 心跳会话已过期 - 标记协调器已死亡

    使用 python kafka api 从只有少量消息的主题中读取消息 Kafka 不断地一遍又一遍地重放队列中的消息 它从我的主题接收一条消息 返回每条消息内容 然后抛出ERROR Heartbeat session expired ma
  • 带权重的欧几里得距离

    我目前正在使用SciPy计算欧氏距离 dis scipy spatial distance euclidean A B 在哪里 A B是5维位向量 现在工作正常 但是如果我为每个维度添加权重 是否仍然可以使用 scipy 我现在拥有的 sq
  • Python——“对象布局”

    有人可以描述以下异常吗 什么是 对象布局 以及它是如何定义的 谢谢 Traceback most recent call last File test gui py line 5 in
  • Python 上的 io.open() 和 os.open() 有什么区别?

    我意识到open 我一直在使用的函数是一个别名io open 以及导入 from os会掩盖这一点 通过以下方式打开文件有什么区别io模块和os module io open 是文件 I O 的首选高级接口 它将操作系统级文件描述符包装在一
  • 使用 PIL 对图像进行着色,同时保持透明度?

    好吧 情况是这样的 我想使用 Python 图像库来 主题化 图像 如下所示 Theme color 33B5E5 IN OUT 我使用 ImageMagick 命令得到了结果 convert image png colorspace gr
  • Tkinter 嵌套主循环

    我正在写一个视频播放器tkinter python 所以基本上我有一个可以播放视频的 GUI 现在 我想实现一个停止按钮 这意味着我将有一个mainloop 对于 GUI 还有另一个嵌套mainloop 播放 停止视频并返回 GUI 启动窗
  • 仅使用 NumPy einsum 处理上三角元素

    我使用 numpy einsum 来计算形状为 3 N 的列向量 pts 数组与其自身的点积 从而得到形状为 N N 的矩阵 dotps 与所有点积 这是我使用的代码 dotps np einsum ij ik gt jk pts pts
  • 如何使用 python 将威布尔分布拟合到数据?

    我正在寻找使用 Python 3 4 找到最适合一组数据的威布尔参数 import scipy stats as ss list1 list2 for x in range 0 10 list1 append ss exponweib pd
  • PyQt5:如何将 QPushButton 连接到插槽?

    好吧 几乎所有教程 可理解的用人类语言编写的文档都是针对 PyQt4 的 但是 PyQt5 改变了整个 将按钮连接到插槽 的工作方式 但我仍然不知道如何做到这一点 我在 QtDesigner 中做了一个快速 gui 并且有一个 QPushB
  • 如何在plotly dash应用程序中编写数学符号?

    我想在绘图破折号应用程序中绘制数学符号 例如 我尝试过这个 import dash import dash html components as html app dash Dash name app layout html Div chi
  • 获取 QComboBox 的所有项目 - PyQt4 (Python)

    我有很多QComboBoxes 在某个时刻 我需要获取特定的每个项目QComboBox迭代 虽然我只能有一个与中的项目相对应的项目列表QComboBox 我宁愿直接从小部件本身获取它们 有大量的QComboBoxes每个都有很多项目 有没有
  • 将时间戳合并到自定义时间段中

    我对熊猫相当陌生 并且遇到了障碍 我有一个包含时间戳的数据帧 我想在我的数据框中添加一列 其中包含自定义期间名称 字符串 例如 df pd DataFrame pd date range 01 01 00 00 periods 72 fre
  • 如何在Python中使用JWK解码JWT令牌

    我正在开发一个应用程序 其中所有 API 都受 OAuth 保护 我已从客户端收到访问令牌 但无法解码和验证令牌 我有以下格式的 JWK keys kty RSA x5t S256 Some value e Some Value x5t S
  • SQLAlchemy - 如何从 ResultProxy 访问列名并写入 CSV 标题

    我正在尝试使用 SQLAlchemy 建立与 PostgreSQL 数据库的连接 执行 SQL 查询并将文件的输出打印到 Linux 中的文件中 from sqlalchemy import create engine import yam
  • 如何在 Jinja2 中包含具有相对路径的模板

    我正在尝试在模板中包含同一文件夹中的另一个模板 为此 我只是在做 import header jinja2 问题是我不断收到TemplateNotFound error 我的模板文件夹看起来像 myProject templates arb
  • 如何通过python将python字典存储到mysql数据库中

    我试图通过将字典转换为字符串然后尝试插入来将以下字典存储到 mysql DB 中 但出现以下错误 如何解决这个问题 或者有其他方法将字典存储到 mysql DB 中吗 dic office component office Word2010
  • 如何将焦点设置到 django 表单元素的 CharField

    我的登录页面使用 Django 表单 I want to set focus to the first textField username when the page loads 我尝试使用 Jquery 如下 但没有得到结果 forms
  • REQ/REP 模式中的 ZeroMQ FiniteStateMachineException

    我有两个简单的组件 它们应该使用 REQ REP ZeroMQ 模式相互通信 服务器 REP Socket 是使用 pyzmq 在 Python 中实现的 import zmq def launch server print Launchi

随机推荐