如何实时刷新同一行中的控制台,Python

如何实时刷新同一行中的控制台,Python,python,macos,console,Python,Macos,Console,我正在尝试进行文本刷新,以便能够在同一行中显示一些信息,基本上是重写旧文本 代码示例: from time import sleep def countdown(n): if n > 0 : print(n) sleep(0.3) countdown(n-1) else : print("Blastoff!") countdown(3) 如果我在print语句中使用“\r”,它会\n使用

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

代码示例:

from time import sleep

def countdown(n):
    if n > 0 :
        print(n)
        sleep(0.3)
        countdown(n-1)
    else :
        print("Blastoff!")
countdown(3)
如果我在print语句中使用“\r”,它会\n使用两次

我尝试了回车“\r”和cls clear()函数,所有的东西都在堆栈上,但对Mac没有任何效果

代码示例: 如果我在print语句中使用“\r”,它会\n使用两次。 这是电流输出: 3. 2. 1. 起飞

在同一个窗口。 我希望输出如下: 第三行

2#与3在同一地点。。等等 . .
起飞最后一行将是屏幕上唯一的内容。

默认情况下,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!")

您还需要
导入系统

它不工作。它输出21次发射!两行之间有两个空格。我希望所有这些都在一行中并重写。你在使用python 2吗?我在使用3.7.1Hmm。。。这很奇怪,我在回答中给出的片段应该很好用。您可以尝试将
import os
添加到导入中,并在
sleep(0.3)
之后添加
os.system('cls')
。这将在打印内容后清除控制台。我发现在python中,如果没有外部模块,将屏幕从空闲状态清除是不可能的。没有解决办法。谢谢您的时间@Kanjiu,很高兴有人愿意帮忙:)祝您愉快
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!")
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()