如何只显示 Python 3 中的最后一张打印件?

How can I show only the last print in Python 3?

印刷品太多,我想擦除一些临时印刷品。例如,我有:

import time
for shard in range(3):
    for i in range(100):
        print("image_{} in shard_{}".format(i, shard))
        time.sleep(1)

而不是所有印刷品的列表

image_0 in shard_0
image_1 in shard_0
image_2 in shard_0
image_3 in shard_0

我希望看到它们打印一次,然后被下一次打印取代。

image_0 in shard_0
image_1 in shard_0
image_2 in shard_0

最后我只有

image_99 in shard_0
image_99 in shard_1
image_99 in shard_2

在屏幕上。

我怎样才能做到这一点?

尝试:

for i in range(3):
    print("{}\r".format(i), end="")

print("Hello\r", end="")
print("World\r", end="")

输出将是 World

我认为您误解了“刷新输出缓冲区”的含义。我不会删除以前打印的内容。它只是意味着“立即打印,无需等待整行(或文件价值)的输出。”

刷新可能很重要的一个例子是当你在一行中打印出几件事时,它们之间有一个延迟:

import time

for i in range(10):
    print(i, end="")
    time.sleep(1)

在许多控制台上,这将在 10 秒内不打印任何内容,然后您会看到 0123456789 同时出现。但是,如果您将 flush=True 添加到 print 调用中,您会看到每个数字分别出现,一个接一个,中间有一秒钟的延迟。你仍然在一行中得到 0123456789,但它会逐渐增加。 (请注意,某些 IDE 中内置的控制台可能不会以真实终端的正常方式进行行缓冲,因此您的里程可能会有所不同。真实控制台更加一致。)

如果你打印的整行末尾有一个换行符(print 的默认设置),通常不需要使用 flush,因为大多数终端都是 line-buffered.这意味着它们会在每一行的末尾自动刷新自己,即使没有 flush=True 在其输出后明确要求刷新。

试试这个:

import time
for shard in range(3):
    for i in range(100):
        print("image_{} in shard_{}\r".format(i,shard),end = "")
        time.sleep(1)
    print()