ПРИМЕЧАНИЕ: Хотя я даю много информации о Inquirer, я почти уверен, что большая часть из этого не применима (просто для безопасности). Что касается моего фактического вопроса о проклятиях, он находится внизу.
Я использую модуль Inquirer в Python 3, чтобы пользователь мог выбирать значение из списка. Я запускаю это:
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, чтобы выбрать, после чего переменная «selection» будет содержать выбранное мной значение. Проблема в следующем: после того, как выбор сделан, варианты все еще отображаются. Я хочу удалить их, когда закончу. В настоящее время я использую escape-коды 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
Проблема в том, что escape-коды ANSI не универсальны. Я хочу использовать решение, которое работает на всех терминалах, предпочтительно curses, но curses не очень дружелюбны для новых пользователей, поэтому мне было интересно, знает ли кто-нибудь, как использовать curses, чтобы «удалить x строк над текущей позицией». Спасибо!





проклятия, как таковой, сотрет весь дисплей (что, вероятно, не то, что вы хотите). Низкоуровневый подход terminfo / termcap может показаться многообещающим, но хотя ECMA-48 действительно определяет последовательность (ED, с параметром 1), которая стирает выше текущей позиции, нет предопределенной возможности terminfo / termcap, которая соответствует этому. Все, что вы найдете, это возможность стирания до конца экрана или стирания всего экрана.
«Последовательности ANSI» - устаревший термин. Обращаясь к ECMA-48, вы могли бы сделать
sys.stdout.write('\x1b[1J')
после перемещения курсора в последнее место, которое вы хотите стереть.