2012-05-31 16 views
5

ich den folgenden Code haben:Löschen Sie die letzte Eingabezeile in Python

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

Die Konsolenausgabe sieht wie

input number: 10 

ich den Text input number: 10 löschen möchten, nachdem der Benutzer ENTER drückt. Die Rücktaste \b kann es nicht tun.

+0

mit welchem ​​Betriebssystem arbeiten Sie? –

+0

@MariaZverina Ubuntu 12.04 – xralf

Antwort

6

Dies funktioniert in den meisten Unix-und Windows-Terminals ... Es verwendet sehr einfache ANSI-Escape.

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

Bitte beachten Sie, dass unter Windows Sie benötigen die ANSI-Unterstützung mit dem folgenden http://www.windowsnetworking.com/kbase/windowstips/windows2000/usertips/miscellaneous/commandinterpreteransisupport.html

„\ 033 [A“ string von Terminal interpretiert wird, ermöglichen, wie Sie den Cursor eine Zeile nach oben bewegen.

+0

Ich habe versucht, Ihren Code, aber die Zeile ist immer noch da (z. B. wenn ich Nummer 10 eingeben) sieht es wie folgt aus: "Eingabe Nummer: 0" "Fertig" und der Cursor ist darunter. – xralf

+0

Sind am Ende der Zeichenfolge genügend Leerzeichen? Beachten Sie, dass am Ende meiner Zeile viele Leerzeichen stehen. –

+0

Ja, es ist genau wie bei Ihnen. – xralf

-2

Sie können OS-Modul

import os 
os.system('clear') 

den "cls" und "Löschen" sind Befehle benutzen, die ein Terminal löschen wird (dh eine DOS-Eingabeaufforderung oder Terminal-Fenster).

Für IDLE: Das Beste, was Sie tun können, ist den Bildschirm nach unten viele Zeilen blättern, zB:

print "\n" * 100 
+0

Ich kenne diesen Befehl, aber ich möchte nur den Text "Eingabe Nummer: X" entfernen, weil der obige Text nicht entfernt werden soll. – xralf

+0

Warum müssen Sie das entfernen ... was ist Ihre genaue Anforderung? –

+0

Ich lese interaktiv in einer Schleife und möchte nicht viel Text auf dem Terminal haben. Den gesamten Kontext zu erklären, wäre lang und off-topic. – xralf

1

Es gibt Kontrollsequenzen für ‚Wort zurück‘ und ‚Linie zurück‘ und dergleichen, die sich bewegen der Mauszeiger. Sie können also versuchen, den Cursor an den Anfang des zu löschenden Texts zu bewegen und ihn mit Leerzeichen zu überschreiben. Aber das wird sehr schnell kompliziert. Zum Glück hat Python den Standard curses module für "Advanced Terminal Handling".

Das einzige Problem dabei ist, dass es im Moment nicht plattformübergreifend ist - dieses Modul wurde noch nie nach Windows portiert. Wenn Sie also Windows unterstützen müssen, werfen Sie einen Blick auf die Console module.

+0

Würdest du wissen, welche Funktionen aus 'Curses'-Modul hilfreich wären? – xralf

+0

@xralf Sie wollen 'Fenster' Objekt erstellen, indem Sie' curses.initscr() 'aufrufen, und machen Sie Ihre E/A mit den Fenstermethoden statt' print' und 'raw_input'. Wenn Sie dann eine ganze Zeile löschen möchten, müssen Sie sicherstellen, dass sich der Cursor irgendwo in dieser Zeile befindet, und '.deleteln()' im Fenster aufrufen. – 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 , "]" 
Verwandte Themen