2012-05-31 3 views
5

У меня есть следующий код:Удаление последнего ввода строки в Python

num = int(raw_input("input number: ")) 
print "\b" * 20 

Выход консоли выглядит как

input number: 10 

Я хотел бы удалить текст input number: 10 после того, как пользователь нажимает ENTER. Ключ возврата \b не может этого сделать.

+0

В какой операционной системе вы работаете? –

+0

@MariaZverina Ubuntu 12.04 – xralf

ответ

6

Это будет работать в большинстве терминалов unix и windows ... он использует очень простой ANSI-выход.

num = int(raw_input("input number: ")) 
print "\033[A        \033[A" # ansi escape arrow up then overwrite the line 

Пожалуйста, обратите внимание, что в Windows, возможно, потребуется включить поддержку ANSI, используя следующие http://www.windowsnetworking.com/kbase/windowstips/windows2000/usertips/miscellaneous/commandinterpreteransisupport.html

«\ 033 [A» строка интерпретируется терминалом, как переместить курсор на одну строку вверх.

+0

Я пробовал свой код, но строка все еще там (например, когда я вводил номер 10), он выглядит следующим образом: «номер ввода: 0» «Готово» и курсор находится под ним. – xralf

+0

Есть ли достаточное количество пробелов в конце строки? Обратите внимание, что в конце моей строки есть кучи пробелов. –

+0

Да, это точно так же, как ваше. – xralf

-2

Вы можете использовать модуль Os

import os 
os.system('clear') 

The «ЦБС» и «ясно» являются команды, которые будут очистить терминал (т.е. в строке или окне терминала DOS).

Для IDLE: Лучшее, что вы можете сделать, это прокрутить экран вниз множество линий, например:

print "\n" * 100 
+0

Я знаю эту команду, но я бы хотел удалить только текст «номер ввода: X», потому что текст выше не должен удаляться. – xralf

+0

Зачем нужно устранять это ... Какое ваше точное требование? –

+0

Я читаю интерактивно в цикле и не хочу иметь много текста на терминале. Объяснение всего контекста будет длительным и нестандартным. – xralf

1

Есть управляющие последовательности для «слова обратно» и «линию обратно» и тому подобное, что движется курсор. Таким образом, вы можете попробовать переместить курсор обратно в начало текста, который хотите удалить, и переопределить его пробелами. Но это осложняется очень быстро. К счастью, у Python есть стандарт curses module для «расширенной обработки терминала».

Единственная проблема заключается в том, что он не является кросс-платформенным на данный момент - этот модуль никогда не был перенесен в Windows. Итак, если вам нужно поддерживать Windows, посмотрите на Console module.

+0

Знаете ли вы, какие функции из модуля 'curses' были бы полезны? – xralf

+0

@xralf вам нужно создать объект 'window', вызвав' curses.initscr() 'и получить свои ввод-вывод с помощью оконных методов, а не' print' и 'raw_input'. Затем, когда вы хотите удалить целую строку, вам нужно убедиться, что курсор находится где-то на этой строке, и вызовите '.deleteln()' в окне. – lvc

0
import sys 

print "Welcome to a humble little screen control demo program" 
print "" 

# Clear the screen 
#screen_code = "\033[2J"; 
#sys.stdout.write(screen_code) 

# Go up to the previous line and then 
# clear to the end of line 
screen_code = "\033[1A[\033[2K" 
sys.stdout.write(screen_code) 
a = raw_input("What a: ") 
a = a.strip() 
sys.stdout.write(screen_code) 
b = raw_input("What b: ") 
b = b.strip() 
print "a=[" , a , "]" 
print "b=[" , b , "]" 
Смежные вопросы