2012-05-31 36 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') 

的“CLS”和“清除”是其中将清除的终端(即,DOS提示符或终端窗口)的命令。

空闲:你可以做的最好的是滚动屏幕向下地段线路,例如:

print "\n" * 100 
+0

我知道这个命令,但我只想删除文本“input number:X”,因为上面的文本不应该被删除。 – xralf

+0

为什么需要删除......你的确切要求是什么? –

+0

我正在循环阅读,不想在终端上留下太多文字。解释整个背景将是漫长而偏离主题。 – xralf

1

有对“背单词”控制序列和“行回”等,其举措光标。因此,您可以尝试将光标移回到要删除的文本的开头,并用空格覆盖它。但这很快就会变得复杂。谢天谢地,Python的“高级终端处理”标准为curses module

与此唯一的问题是,它目前不是跨平台 - 该模块从未被移植到Windows。因此,如果您需要支持Windows,请查看Console module

+0

你知道'curses'模块中的哪些函数会有帮助吗? – xralf

+0

@xralf你会希望通过调用'curses.initscr()'创建'window'对象,并使用窗口方法而不是'print'和'raw_input'来获得你的I/O。然后当你想删除整行时,你需要确保光标位于该行的某个位置,并在窗口中调用'.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 , "]"