sys.stdout.flush在jupyter笔记本中不起作用

时间:2017-01-27 06:31:39

标签: python jupyter-notebook flush

所以我只想重新运行此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()创建一个简单的"进展"输出。你可以看到他的repo的输出它只显示最后一集的迭代10000/10000,因为使用sys.stdout.flush()

但是当我尝试在我的jupyter笔记本中运行它时(我使用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时我是否遗漏了某些内容以使其正常工作?

1 个答案:

答案 0 :(得分:1)

Charless Duffy评论让一切都清晰。覆盖的问题不在于打印功能中的刷新功能。

我发现解决方案只是编辑打印格式:

AbstractThing

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

并且覆盖现在可以使用