2012-05-31 85 views
5

Tengo el siguiente código:Eliminar la última fila de entrada en Python

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

La salida de la consola parece

input number: 10 

Me gustaría eliminar el texto input number: 10 después de que el usuario presiona ENTER. La tecla de retroceso \b no puede hacerlo.

+0

con qué sistema operativo trabajas? –

+0

@MariaZverina Ubuntu 12.04 – xralf

Respuesta

6

Esto funcionará en la mayoría de los terminales de Unix y Windows ... usa un escape ANSI muy simple.

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

Tenga en cuenta que en Windows es posible que deba activar el soporte de ANSI utilizando la siguiente http://www.windowsnetworking.com/kbase/windowstips/windows2000/usertips/miscellaneous/commandinterpreteransisupport.html

"\ 033 [Una" cadena se interpreta por el terminal como mover el cursor una línea hacia arriba.

+0

Intenté su código, pero la fila todavía está allí (por ejemplo, cuando ingresé el número 10) tiene el siguiente aspecto: "número de entrada: 0" "Hecho" y el cursor está debajo. – xralf

+0

¿Hay suficientes espacios al final de la cadena? Observe que hay montones de espacios al final de mi línea. –

+0

Sí, es exactamente como el tuyo. – xralf

-2

Puede utilizar módulo os

import os 
os.system('clear') 

Los "cls" y "claro" son comandos que despejará un terminal (es decir, un aviso, o ventana de terminal DOS).

para el ralentí: El mejor que podría hacer es desplazar la pantalla hacia abajo un montón de líneas, por ejemplo:

print "\n" * 100 
+0

Conozco este comando, pero me gustaría eliminar solo el texto "ingresar número: X" porque el texto anterior no debe eliminarse. – xralf

+0

¿Por qué es necesario eliminar eso ... cuál es su requisito exacto? –

+0

Estoy leyendo interactivamente en un bucle y no quiero tener mucho texto en la terminal. Explicar todo el contexto sería largo y fuera de tema. – xralf

1

Hay secuencias de control para 'palabra de nuevo' y 'línea de fondo' y similares que se mueven el cursor Por lo tanto, podría intentar mover el cursor al comienzo del texto que desea eliminar y anularlo con espacios. Pero esto se complica muy rápido. Afortunadamente, Python tiene el estándar curses module para "manejo avanzado de terminales".

El único problema con esto es que no es multiplataforma en este momento, ese módulo nunca se ha portado a Windows. Entonces, si necesita soportar Windows, eche un vistazo al Console module.

+0

¿Sabrías qué funciones del módulo 'curses' serían útiles? – xralf

+0

@xralf usted querrá crear el objeto 'window' al llamar a' curses.initscr() ', y hacer su E/S usando los métodos de ventana en lugar de' print' y 'raw_input'. Luego, cuando desee eliminar una línea completa, debe asegurarse de que el cursor esté en alguna parte de esa línea, y llame a '.deleteln()' en la ventana. – 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 , "]" 
Cuestiones relacionadas