如何在Python 3.3.3中进行打印而不带回车符?

9
首先,我不需要知道如何在同一行中使用print(some_stuff, end="")进行打印。
在Python 2.7中,你可以输入:
while True:
for i in ["/","-","|","\\","|"]:
    print "%s\r" % i,

同时,在同一行的同一位置,它会打印出这5个字符,让它看起来像是一个旋转的条形图(实际上你可以试试)。 问题是,我在Python 3.3中无法做到同样的事情,尽管我已经尝试了几种方法。 我需要实现一个倒计时计时器,代码大致如下:

import time
t = 120
while t > 0:
    t -= 1
    print("Time left till next update: %d seconds" % t)
    time.sleep(1)

希望有人能帮我,需要输出一个字符串,只有秒数在变化,格式不能改变...希望有人能帮忙。

我觉得你把回车符(\r)和将光标返回到同一行开头的东西混淆了,以及换行符(\n)自动打印并跳转到下一行开头的东西。 - abarnert
抱歉,我不太明白你说的话...(这里已经很晚了,我有点困 :))但我的问题已经得到解答了。无论如何还是谢谢! - RGS
你的问题是如何在不换行的情况下打印。但这不是你想要做的事情。(如果是的话,只需省略\r即可。) - abarnert
实际上,我的问题的重点是如何在回车符的情况下完成它。 - RGS
1
那么,为什么标题是“如何_不使用_回车符”,而问题的要点恰恰相反呢? - abarnert
@abarnert 我知道已经过去了7年...但我完全不知道当时的意思。我知道我的英语当时不是很好,所以可能用词让大家感到困惑。 - RGS
2个回答

13
您使用 end='\r' 作为关键字参数:
print("Time left till next update: %d seconds" % t, end='\r')
< p > 默认情况下,< code > end 的值为 < code > '\n' ,但您可以指定自己的值。 < /p >

我已经尝试过了。那段代码只是把一句话写在另一句话前面... 我正在使用IDLE,如果这有影响的话... 我得到的输出是这样的:http://prntscr.com/2fiwvo - RGS
2
@RSerrao:我在终端测试过了,它可以正常工作。也许IDLE不再支持\r了? - Martijn Pieters
谢谢!那就是问题所在。我刚刚在Power Shell中尝试了一下,它完全正常工作。 - RGS
完全没有任何变化。当我在IDLE中测试时,使用2.7和3.3版本,在三个不同的平台上,\r在控制台窗口中打印一个换行符而不是回车符,并且在输出窗口中根本没有任何输出。 - abarnert
1
@RSerrao,别忘了在行末加一个空格,以便在计数长度改变时擦除最后一个字符。 - Mark Ransom
@MarkRansom 不错的提示 ;) - RGS

0

您也可以尝试更低级别的操作,例如:os.write(fd, data)fd=1sys.stdin)上。
请注意,data 必须是 bytes 类型(b'whatever data')。

import os, time
os.write(1, b'Time left till next update: 120 seconds'+b'\b'*8)
t=120
while t>0:
    time.sleep(1)
    t -= 1
    os.write(1, b'\b'*3+str(t).zfill(3).encode())
print()

在终端中它可以正常工作,但 Python IDLE 忽略了 '\r''\b'


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接