我正在为我的上传脚本做一个进度条,因此我想打印一行多个'#',但我无法让它工作。当我告诉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()”:)
答案 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)