pick:终端交互式选择列表,两行代码搞定
pick:终端交互式选择列表,两行代码搞定

写 CLI 工具时,让用户在终端里从一堆选项中做选择,是一个高频需求。手写交互逻辑要处理键盘输入、光标移动、高亮显示,代码量不小。
wong2 开发的 pick 把这件事封装成了两行 Python 代码。项目目前在 GitHub 上有 790 个 Star。

它能做什么
pick 是一个轻量级 Python 库,专门在终端里创建交互式选择列表。单选和多选都支持,界面干净,操作直觉。
基本用法:
from pick import pick
title = 'Please choose your favorite programming language: '
options = ['Java', 'JavaScript', 'Python', 'PHP', 'C++', 'Erlang', 'Haskell']
option, index = pick(options, title)
print(option)
print(index)
运行后终端会显示一个可上下移动的选择列表。用户用方向键导航,回车确认,pick 返回选中的项和索引。
多选模式同样简洁:
selected = pick(options, title, multiselect=True, min_selection_count=1)
按空格选中或取消,回车提交。min_selection_count 限制至少选几项才能确认,避免空提交。
技术细节
pick 默认使用 curses 作为渲染后端。curses 是 Unix 系统上处理终端界面的标准库,几乎所有 Linux 和 macOS 都自带,不需要额外安装依赖。
如果偏好 blessed 库,pick 也提供了切换方式。安装时带上可选依赖:
pip install "pick[blessed]"
调用时指定 backend="blessed" 即可。blessed 在 Windows 兼容性和色彩支持上比 curses 更友好一些。
可配置项
pick 的 API 保持了小而精的风格,暴露了恰到好处的配置项:
options:选项列表title:列表上方的提示标题indicator:选中项指示符,默认是*,可改为>或其他字符default_index:设置默认选中项,不传默认选第一项multiselect:开启多选min_selection_count:多选模式下最少需选中的项数screen:在已有 curses 应用中嵌入 pick 时,可传入 screen 对象避免重复初始化position:指定列表起始显示位置,适合复杂终端布局中的精确定位quit_keys:自定义退出快捷键backend:选择渲染后端
后三个参数(screen、position、quit_keys)说明 pick 对嵌入已有终端应用的场景做了认真考虑,不只是当作独立选择器来用。
安装
支持 Python 3.8 到 3.14:
pip install pick
零额外依赖即可使用。只有需要 blessed 后端时才加 [blessed] 扩展。
社区衍生
pickpack 是基于 pick 的一个 fork,扩展了树形数据的选择功能,适合需要层级选择的场景。
小结
pick 解决的是一个具体且常见的问题:在终端里做交互选择。它没有试图成为全能 TUI 框架,API 表面积很小,学习成本几乎为零。对于写 CLI 脚本时需要内嵌选择列表的场景,pick 是直接可用的选项。

浙公网安备 33010602011771号