4

我在 python 2.7 的打印函数中使用 '\r'。它在终端中运行良好,但在终结器中运行良好。


例如:

我正在使用从 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)

有人可以建议修复吗

4

2 回答 2

2

只需将 \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()

确保在您的个人资料设置的终结者方面是干净的。请务必查看兼容性选项卡,因为它提到了奇怪的应用程序行为。

在此处输入图像描述

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


原始答案

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

因此,如果您的目标是换行,您应该\n改用。

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

于 2018-04-15T20:25:49.043 回答
0

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


就我而言,我在同一个窗口中使用了多个选项卡,因此 \r 不起作用。当我在单独的窗口或具有全水平宽度的选项卡中使用它时,它工作得很好。

于 2018-04-15T21:03:11.620 回答