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

时间:2011-02-24 06:24:08

标签: 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

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

解决方案: 每次打印后都会出现“sys.stdout.flush()”:)

4 个答案:

答案 0 :(得分:6)

您可能需要在每次print调用后刷新输出缓冲区。见How to flush output of Python print?

答案 1 :(得分:0)

我在IDLE for 2.5中尝试了你的代码。所以我不得不使用打印格式 - 打印'#',

这是我执行时得到的结果 - 系统每秒打印“#”符号。在循环结束时,我得到了IDLE的提示。所以在我看来,它正在做你期望它做的事情。

您专门使用哪个版本?对不起,我没有版本3.所以我无法在那里测试。

答案 2 :(得分:0)

您始终可以使用strip()功能。

答案 3 :(得分:0)

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)