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

标签 python macos terminal

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

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/

相关文章:

python - 查询集上的函数出现类型错误

python - 在 Python 中将时间增量相加

macos - 在 Mac OS 中以编程方式选择查找器中的多个文件

c++ - 是否有任何基于文本的进度条实现?

python - 如何测量直线和矩形之间的重叠?

python - Python 对象是否在内部存储为字典?

swift - NSButton 不调用它的 Action

macos - Flutter macOS 插件

Bash 将光标置于行首

linux - 查找当前按窗口 Id 打开的 gnome 终端选项卡的数量