2012-05-31 13 views
5

Mam następujący kod:Usuń ostatni wiersz wejścia w Pythonie

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

Wyjście konsola wygląda

input number: 10 

Chciałbym usunąć tekst input number: 10 gdy użytkownik naciśnie ENTER. Klawisz Backspace \b nie może tego zrobić.

+0

pod którym systemem operacyjnym pracujesz? –

+0

@MariaZverina Ubuntu 12.04 – xralf

Odpowiedz

6

To będzie działać w większości terminali unix i windows ... używa bardzo prostej ucieczki ANSI.

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

Należy pamiętać, że w systemie Windows może być konieczne, aby umożliwić obsługę ANSI przy użyciu następujących http://www.windowsnetworking.com/kbase/windowstips/windows2000/usertips/miscellaneous/commandinterpreteransisupport.html

„\ 033 [A” ciąg jest interpretowany przez terminal jak przesunąć kursor o jeden wiersz w górę.

+0

Próbowałem twojego kodu, ale wiersz nadal tam jest (np. Kiedy wprowadzam numer 10) wygląda następująco: "numer wejścia: 0" "Gotowe" i kursor znajduje się pod nim. – xralf

+0

Czy jest wystarczająco dużo spacji na końcu łańcucha? Zauważ, że jest mnóstwo stosów na końcu mojej linii. –

+0

Tak, jest dokładnie taki sam jak twój. – xralf

-2

można użyć modułu OS

import os 
os.system('clear') 

The „CLS” i „czysty” to polecenia, które spowoduje wyczyszczenie terminala (tzn szybkiego lub oknie terminala DOS).

Dla IDLE: Najlepszy można zrobić to, aby przewinąć ekran w dół wiele linii, np:

print "\n" * 100 
+0

Znam to polecenie, ale chciałbym usunąć tylko tekst "input number: X", ponieważ powyższy tekst nie powinien zostać usunięty. – xralf

+0

Dlaczego musisz usunąć to ... Jakie jest twoje dokładne wymaganie? –

+0

Czytam interaktywnie w pętli i nie chcę mieć dużo tekstu na terminalu. Objaśnienie całego kontekstu byłoby długie i nie na temat. – xralf

1

Są to sekwencje kontrolne dla „słowo Back” i „linia z powrotem”, a jak ten ruch kursor. Więc możesz spróbować przesunąć kursor z powrotem na początek tekstu, który chcesz usunąć, i przesłonić go spacjami. Ale to bardzo szybko się komplikuje. Na szczęście Python ma standard curses module dla "zaawansowanej obsługi terminalu".

Jedynym problemem związanym z tym jest fakt, że obecnie nie jest to platforma wieloplatformowa - ten moduł nigdy nie został przeniesiony do systemu Windows. Tak więc, jeśli potrzebujesz obsługi systemu Windows, spójrz na Console module.

+0

Czy wiesz, które funkcje z modułu 'curses' będą pomocne? – xralf

+0

@xzałóż, że chcesz utworzyć obiekt 'window', wywołując' curses.initscr() ', i wykonaj swoje operacje we/wy używając metod window zamiast' print' i 'raw_input'. Następnie, gdy chcesz usunąć całą linię, musisz upewnić się, że kursor znajduje się gdzieś w tym wierszu i wywołać '.deleteln()' w oknie. – 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 , "]"