Модуль Python Inquirer: удаление вариантов по завершении (с помощью проклятий)

ПРИМЕЧАНИЕ: Хотя я даю много информации о 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 строк над текущей позицией». Спасибо!

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
505
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

проклятия, как таковой, сотрет весь дисплей (что, вероятно, не то, что вы хотите). Низкоуровневый подход terminfo / termcap может показаться многообещающим, но хотя ECMA-48 действительно определяет последовательность (ED, с параметром 1), которая стирает выше текущей позиции, нет предопределенной возможности terminfo / termcap, которая соответствует этому. Все, что вы найдете, это возможность стирания до конца экрана или стирания всего экрана.

«Последовательности ANSI» - устаревший термин. Обращаясь к ECMA-48, вы могли бы сделать

sys.stdout.write('\x1b[1J')

после перемещения курсора в последнее место, которое вы хотите стереть.

Другие вопросы по теме