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