回车不在终结者工作,但在Ubuntu的终端工作正常

时间:2018-04-15 20:17:27

标签: python carriage-return terminator

我正在使用' \ r'在python 2.7中的打印功能。它在终端中工作正常但不在终结器中工作。

例如:

我正在使用递减计数器,该递减计数器从n递减到0.在终端中,计数值在同一行更新,而在终结符中,计数值在新行上打印。我使用终结器有各种原因,例如它的高级功能,如选项卡分区等。下面是代码快照

import sys
import time

if __name__ == "__main__":

    sleep_time_in_sec = 15
    time_to_go_back_mns = 10

    for remaining in range(sleep_time_in_sec, -1, -1):
        sys.stdout.write("\r")
        sys.stdout.write(
            "{:2d} seconds remaining to read last {:2d} minutes of data and perform prediction .....".format(remaining,
             time_to_go_back_mns))
        sys.stdout.flush()
        time.sleep(1)

有人可以建议修复

2 个答案:

答案 0 :(得分:1)

只需将\ r放在write语句的末尾,如下所示:

sys.stdout.write(
            "{:2d} seconds remaining to read last {:2d} minutes of data and perform prediction .....\r".format(remaining,
             time_to_go_back_mns))

然后新数据将覆盖该行,您可以使用flush()清除该行,然后再次写入该行:

sys.stdout.flush()

确保在终结器端,您的配置文件设置是干净的。请务必查看兼容性选项卡,因为它提到了奇怪的应用程序行为。

enter image description here

注意如果终端尺寸太小,回车将停止运行。它只会返回到最后一行的第一个字符


原始回答

\r实际上意味着“回车”,而\n是换行符。 在Linux(Unix)中,您通常使用\n\r\n

因此,如果您的目标是换行,则应使用\n代替。

它可能在“终端”(可能是哪一个)中起作用的原因是因为某些终端(特别是gnome的终端)捕获\r并将其视为\r\n

答案 1 :(得分:0)

这篇文章的答案是@Rick van Lieshout。

就我而言,我在同一个窗口中使用了多个标签,因此\ r \ n无效。当我在单独的窗口或具有完全水平宽度的标签中使用它时,它工作正常。