carriage return 在 Terminator 中不工作,但在 Ubuntu 中的 Terminal 中工作正常

carriage return not working in Terminator but works fine in Terminal in Ubuntu

我在 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)

有人可以提出修复建议吗

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

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

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


原回答

\r 实际上意味着 "carriage return" 而 \n 是一个换行符。 在 Linux (Unix) 中,您通常使用 \n\r\n.

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

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

这个 post 的答案交给@Rick van Lieshout。


就我而言,我在同一 window 中使用了多个选项卡,因此 \r 无法正常工作。当我在单独的 window 或具有完整水平宽度的选项卡中使用它时,它工作正常。