2012-05-31 2 views
5

Ho il seguente codice:Cancellare l'ultima riga di immissione in Python

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

L'uscita della console sembra

input number: 10 

vorrei eliminare il testo input number: 10 dopo che l'utente preme ENTER. Il tasto backspace \b non può farlo.

+0

quale sistema operativo si fa a lavorare sotto? –

+0

@MariaZverina Ubuntu 12.04 – xralf

risposta

6

Ciò funzionerà nella maggior parte dei terminali UNIX e Windows ... usa molto semplice fuga ANSI.

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

prega di notare che su Windows potrebbe essere necessario attivare il supporto ANSI utilizzando la seguente http://www.windowsnetworking.com/kbase/windowstips/windows2000/usertips/miscellaneous/commandinterpreteransisupport.html

"\ 033 [A" stringa viene interpretato dal terminale come spostare il cursore di una line up.

+0

Ho provato proprio codice, ma la fila è ancora lì (per esempio quando il numero di ingresso 10) si presenta come segue: "numero di ingresso: 0" "Terminato" e cursore è sotto. – xralf

+0

Ci sono abbastanza spazi alla fine della stringa? Si noti che ci sono un sacco di spazi alla fine della mia linea. –

+0

Sì, è esattamente come il tuo. – xralf

-2

È possibile utilizzare modulo os

import os 
os.system('clear') 

Le "cls" e "clear" sono comandi che eliminare un terminale (cioè una richiesta, o finestra terminale DOS).

Per IDLE: Il meglio che si possa fare è far scorrere lo schermo verso il basso un sacco di linee, come ad esempio:

print "\n" * 100 
+0

so che questo comando, ma mi piacerebbe rimuovere solo il testo "numero di ingresso: X" perché il testo di cui sopra non deve essere rimosso. – xralf

+0

Perché è necessario rimuovere quello ... qual è il tuo esatto requisito? –

+0

Sto leggendo interattivamente in un ciclo e non voglio avere molto testo sul terminale. Spiegare l'intero contesto sarebbe a lungo fuori tema. – xralf

1

ci sono sequenze di controllo per 'parola torna' e 'linea di fondo' e simili che si muovono il cursore. Quindi, potresti provare a spostare il cursore indietro all'inizio del testo che desideri eliminare e sovrascriverlo con spazi. Ma questo si complica molto rapidamente. Per fortuna, Python ha lo standard curses module per "gestione avanzata del terminale".

L'unico problema con questo è che non è cross-platform per il momento - che il modulo non è mai stato portato a Windows. Quindi, se devi supportare Windows, dai uno sguardo allo Console module.

+0

Sapresti quali funzioni del modulo 'curses' saranno utili? – xralf

+0

@xralf si vorrà creare l'oggetto 'window' chiamando' curses.initscr() ', e ottenere il proprio I/O usando i metodi window invece di' print' e 'raw_input'. Quindi, quando si desidera eliminare un'intera riga, è necessario assicurarsi che il cursore si trovi da qualche parte su quella linea e chiamare '.deleteln()' nella finestra. – 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 , "]"