2016-05-03 35 views
1

当我在空闲时使用回车时,似乎没有任何事情发生。python 3.4中的回车不会移动到左边

>>>print('2\r3') 
23 
>>> carriage_return = "I will use a carriage\rreturn" 
>>> print(carriage_return) 
I will use a carriagereturn 

如果我通过命令行运行相同的行它工作正常。

>>>print('2\r3') 
3 

这是一个空闲的错误(如果是的话是否有解决方法)还是我缺少一些简单的东西?我的操作系统是Windows 7

+0

没有答案,但我找到了相关的电子邮件存档:https://mail.python.org/pipermail/tutor/2006-February/045277.html。这就是说,使用回车这种方式是非常罕见的。事实上,它是Windows对新行的标准表示的一部分,并且是旧行的Mac代表的换行符,可能是它不常见的原因之一。我当然不会指望它可以跨系统移植。 (或者甚至在显示器上,正如你发现的那样,例如,它如何使用PuTTY进行SSH工作?)你想完成什么? – jpmc26

+0

感谢您的链接,这是我正在寻找的答案。我并没有试图完成任何事情,特别是通过O'reilly系列的工作。我发现如果我不了解某些东西,它会在稍后咬我。 – KEJ

回答

0

在Windows下你必须做一个“新行” \n你做一个“回车”之前\r

示例:基于评论

>>>car = "carriage\n\rreturn" 
>>>print (car) 
carriage 
return 
>>> 

[编辑]

如果我们的目标是打印比上年线,下面可在Microsoft Windows

import sys 

def print_and_return(string): 
    #adding '\b' which moves the carriage back one character 
    #based on length of the string 
    sys.stdout.write(string.ljust(len(string)*2,'\b')) 
    sys.stdout.flush() 

#this will print to stdout, and 'return' position to start 
print_and_return("string1") 

#normal print, but starting at the start of the previous print 
print("string2") 
012使用

这将产生

string2 

,将有覆盖原来的字符串,就可以把两个语句之间time.sleep(),如果你想看到它。

但是,这将打印在原始行的第一行上,但它不会删除以前打印的字符串,因此如果第二个字符串比最初打印的字符串短,原始打印的字符串的末尾保持打开屏幕。

print_and_return("string1=long") 
print("string2") 

会产生

string2=long 

您可以随时返回以前的字符串的长度,然后添加空格到第二个字符串,然后将用空格覆盖其他字符的结束。

import sys 

def print_and_return(string): 
    sys.stdout.write(string.ljust(len(string)*2,"\b")) 
    sys.stdout.flush() 
    return len(string) 

l = print_and_return("string1=long") 

#normal print, but starting at the start of the previous print 
#adding spaces to ensure the length is the same as previous printed string 
print("string2".ljust(l)) 

它将会产生:

string2 

HTH。

+0

它返回到* same *行的开头并覆盖现有字符的目标。你的答案不会这样做;它会把内容放在一个新的线上。 – jpmc26

+0

@ jpmc26,我编辑了我的答案和代码覆盖 –