我正在尝试为一个过程制作一个进度条,但为了简短起见,请考虑以下代码段:
import sys
import time
for i in range(10):
time.sleep(0.5)
sys.stdout.write('*')
sys.stdout.write('\n')
我期望它做的是在同一行上每半秒打印一个星号(这正是我使用 IDE(例如 Sublime Text)运行代码时所做的)。但是,当我在 Mac OS 终端中运行它时,它只等待 5 秒钟,然后立即打印整个字符串 **********
。
知道为什么会发生这种情况以及如何获得所需的行为吗?
最佳答案
之所以这样做,是因为输出被缓冲了。试试这个:
import sys
import time
for i in range(10):
time.sleep(0.5)
sys.stdout.write('*')
sys.stdout.flush() # <-- this is the key
sys.stdout.write('\n')
通过在每次写入时刷新输出,sys.stdout
不会等待下一个换行符;相反,它会立即写入其缓冲区中的任何字符。
关于Mac 终端中的 Python sys.stdout.write() 奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29176280/