python-3.x - Python Inquirer 模块:完成后删除选择(使用诅咒)
问题描述
注意:虽然我在 Inquirer 上提供了很多信息,但我很确定其中大部分都不会适用(只是为了安全)。对于我关于诅咒的实际问题,它在底部。
我在 Python 3 中使用 Inquirer 模块来允许用户从列表中选择一个值。我运行这个:
import inquirer
choice = inquirer.prompt([inquirer.List("size",message="Which size do you need?",choices=["Large", "Medium", "Small"])
我得到了这个:
[?] What size do you need?: Medium
Large
> Medium
Small
使用向上和向下键,我可以更改我的选择,然后按 Enter 进行选择,之后“选择”变量包含我选择的值。问题是:一旦选择完成,选择仍然显示。我想在完成后删除它们。我目前正在使用 ANSI 转义码在完成后从屏幕上删除选择,其中 x 是选择的数量:
import sys
for i in range (x+1):
sys.stdout.write('\x1b[1A')
sys.stdout.write('\x1b[2K')
将打印的文本保留为:
[?] What size do you need?: Medium
问题是,ANSI 转义码不是通用的。我想使用适用于所有终端的解决方案,最好是curses,但curses对新用户不是很友好,所以我想知道是否有人知道如何使用curses“删除当前位置上方的x行”。谢谢!
解决方案
curses,因此,会擦除整个显示(这可能不是你想要的)。低级别的 terminfo/termcap 方法似乎很有希望,但是虽然 ECMA-48 确实定义了一个序列(ED
, 带有参数),它在当前位置上方1
擦除,但没有与此相对应的预定义 terminfo/termcap 功能。所有你会发现那里有擦除到屏幕末尾或擦除整个屏幕的功能。
“ANSI 序列”是一个过时的术语。参考 ECMA-48,你可以做
sys.stdout.write('\x1b[1J')
将光标移动到您要删除的最后一个位置后。
推荐阅读
- node.js - 为什么当我控制台记录 imageUrl 时,我会变得不确定?
- python - 如何使用 Python 类属性作为 @Classmethod 的默认值?
- parsing - Gnu Bison shift /减少描述层次表达式的基于缩进的语法中的冲突
- css - 图标字体的CSS字体系列后备?
- android - 使用 animateToRegion() 与 animateCamera() 的优缺点
- ansible - 如何检查字符串中的几个关键字并断言是否不存在于 Ansible 任务中
- sockets - 同步 I/O 是否使线程忙?
- python - 多次拟合回归并收集汇总统计信息
- css - 我在看一个 react 页面的 css sheet,很多类都在使用内容来生成图片,但是 VSCode 中的内容显示是一个
- google-apps-script - 允许在提示中使用逗号分隔值:Youtube API 示例