Skip to main content
 首页 » 编程设计

Mac 终端中的 Python sys.stdout.write() 奇怪行为

2025年05月04日17yjmyzz

我正在尝试为一个过程制作一个进度条,但为了简短起见,请考虑以下代码段:

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 不会等待下一个换行符;相反,它会立即写入其缓冲区中的任何字符。