当后续输出的长度较短时,带有flush = True的print()不会完全清除打印输出

时间:2019-07-18 15:58:41

标签: python python-3.x printing

如果将此代码运行几次迭代,您将看到一条打印消息后跟一条较短的打印消息,这将导致较长消息的某些部分保留在较短消息的输出中。

import random
import time

names = ['Mike', 'Alexander', 'Tom', 'Johnny']
numbers = list(range(0, 10))
while True:
    name = random.choice(names)
    number = random.choice(numbers)
    print('\rName: {} - Number: {}'.format(name, number), end='', flush=True)
    time.sleep(1)

编辑

我将代码更改为可解决问题的代码:

import random
import time

names = ['Mike', 'Alexander', 'Tom', 'Johnny']
numbers = list(range(0, 10))
msg_len = 0
while True:
    name = random.choice(names)
    number = random.choice(numbers)
    msg = '\rName: {} - Number: {}'.format(name, number)
    buffer = msg_len - len(msg)
    buffer = buffer if buffer > 0 else 0
    print(msg, end=' '*buffer, flush=True)
    msg_len = len(msg)
    time.sleep(1)

1 个答案:

答案 0 :(得分:0)

它本身并没有留在输出中。您将在同一行上重新打印,但这包括对先前输出的隐式清理。如果要删除它,则需要积极进行,例如用空格覆盖以前的行长。