【问题标题】:How to refresh the Console in the same line in real time, Python如何在同一行实时刷新控制台,Python
【发布时间】:2019-01-01 12:54:13
【问题描述】:

我正在尝试进行文本刷新,以便能够在同一行显示一些信息,基本上是重写旧文本。

代码示例:

from time import sleep

def countdown(n):
    if n > 0 :
        print(n)
        sleep(0.3)
        countdown(n-1)
    else :
        print("Blastoff!")
countdown(3)

如果我在打印语句中使用“\r”,它会 \n 两次。

我尝试了回车“\r”和 cls clear() 函数,一切都在堆栈上,但对 Mac 没有任何作用。

代码示例:

from time import sleep

def countdown(n):
    if n > 0 :
        print(n)
        sleep(0.3)
        countdown(n-1)
    else :
        print("Blastoff!")
countdown(6)

如果我在打印语句中使用“\r”,它会 \n 两次。 这是当前输出: 3 2 1 爆破!

在同一个窗口中。

我希望输出如下: 3 # 在第一行

2 # 在与 3 相同的位置.. 以此类推。 . . 发射! # 最后将是屏幕上唯一的东西。

【问题讨论】:

    标签: python macos console


    【解决方案1】:

    默认情况下,print 语句会在输出的末尾追加一个新行。 为了防止这种情况,您需要添加 end="" 作为参数。现在您的输出将始终在同一行。 除此之外,您还想在输出的开头使用"\r"

    如果您在输出末尾添加"\r",则某些控制台可能会在执行回车时覆盖您的输出,并且您最终会得到一个空行。

    我也避免在这里使用递归,迭代通常是更快的方法,除非它过度复杂化你的代码,否则我个人更喜欢它。

    def countdown(n):
        while 0 < n:
            # add some spaces after the number to make sure we overwrite the entire last output
            print("\r%d   " % n, end="")
            n -= 1
            sleep(0.3)
        print("\rBlastoff!")
    

    编辑

    取自这里:Overwrite printed line in python 3.x on mac

    print(...) 替换为sys.stdout.write(...) 以及

    def countdown(n):
        while 0 < n:
            sys.stdout.write("\r%d   " % n)
            sys.stdout.flush()
            n -= 1
            sleep(0.3)
        sys.stdout.write("\rBlastoff!")
        sys.stdout.flush()
    

    您还需要import sys

    【讨论】:

    • 它不起作用。它输出 2 1 0 Blastoff!行之间有两个空格。我希望所有这些都在一行中并重写。
    • 你用的是python 2吗?
    • 我使用的是 3.7.1
    • 嗯...这很奇怪,我在回答中给出的 sn-p 应该可以正常工作。您可以尝试将import os 添加到您的导入中,并在sleep(0.3) 之后添加os.system('cls')。这将在您打印某些内容后清除控制台。
    • 我发现如果没有外部模块,在 python 中从 IDLE 清除屏幕是不可能的。没有解决方法。感谢您抽出时间@Kanjiu,很高兴有人愿意提供帮助:)祝您有美好的一天
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-10
    • 1970-01-01
    • 1970-01-01
    • 2017-05-15
    • 2018-01-13
    • 1970-01-01
    • 2019-08-26
    相关资源
    最近更新 更多