sys.stdout.flush 在 jupyter notebook 中不起作用

sys.stdout.flush not work in jupyter notebook

所以我只想重新运行 来自这个 repo 的代码: https://github.com/dennybritz/reinforcement-learning/blob/master/MC/MC%20Prediction%20Solution.ipynb

我的重点是打印部分:

 for i_episode in range(1, num_episodes + 1):
        # Print out which episode we're on, useful for debugging.
        if i_episode % 1000 == 0:
            print "\rEpisode {}/{}.".format(i_episode, num_episodes)
            sys.stdout.flush()

他正在使用 sys.stdout.flush() 创建一个简单的 "progress" 输出。你可以看到他的回购的输出它只显示最后一集迭代 10000/10000 因为使用 sys.stdout.flush()

但是当我尝试在我的 jupyter notebook 中 运行 它时(我 运行 使用 cmd 命令 jupyter notebook)我认为 sys.stdout.flush() 不起作用,它显示每次打印迭代,不覆盖前一个:

Episode 1000/10000.
Episode 2000/10000.
Episode 3000/10000.
Episode 4000/10000.
Episode 5000/10000.
Episode 6000/10000.
Episode 7000/10000.
Episode 8000/10000.
Episode 9000/10000.
Episode 10000/10000.

当 运行 jupyter 让它工作时,我是否遗漏了什么?

Charless Duffy 的评论说明了一切。覆盖问题不在打印函数中的flush函数buat上。

我发现解决方案只是从以下位置编辑打印格式:

print("\rEpisode {}/{}.".format(i_episode, num_episodes))

print("\rEpisode {}/{}.".format(i_episode, num_episodes), end="")

并且覆盖现在有效

Python 打印没有换行符的列表的程序

声明一个列表
import time
listfruits = ['Apple', 'Banana', 'Orange', 'Mango']
使用 for 循环打印列表
for fruit in listfruits:
    print('\r'+fruit, end=' ')
    time.sleep(3)