在函数下没有换行的打印在Python中不起作用

ggu*_*son 8 python python-3.x

我正在为我的上传脚本做一个进度条,因此我想打印一行多个'#',但我无法让它工作.当我告诉Python不添加换行符时,它会删除它,但它在函数下无法正常工作.在Python 3中使用"print('#',end ='')"或在Python 2中使用"print'#'",删除它但在函数下执行时它不会打印任何内容,直到整个函数完成,它不应该像普通打印一样等待.

import time

i = 0

def status():
    print('#', end='')

while i < 60:
    status()
    time.sleep(1)
    i += 1
Run Code Online (Sandbox Code Playgroud)

这应该每秒打印'#',但事实并非如此.它会在60秒后打印出来.使用just print('#')按预期每秒打印出来.我真的需要一个解决方案.请帮忙!

解决方案:每次打印后"sys.stdout.flush()":)

ide*_*ide 7

您可能需要在每次print调用后刷新输出缓冲区.请参见如何刷新Python打印输出?


Ted*_*man 1

Python 会缓冲输出直到出现换行符(或直到达到特定大小),这意味着在缓冲区获得换行符之前它不会打印任何内容\n。这是因为打印在性能方面确实很昂贵,所以最好填充一个小缓冲区并且只偶尔打印一次。

如果要立即打印,则需要手动冲洗。flush这可以通过将关键字参数设置为 来完成True。

import time

word = "One letter at a time"

for letter in word:
    print(letter, end='', flush=True)
    time.sleep(0.25)
Run Code Online (Sandbox Code Playgroud)