2017-01-27 30 views
0

所以我只是想从这个回购重新运行代码: https://github.com/dennybritz/reinforcement-learning/blob/master/MC/MC%20Prediction%20Solution.ipynbsys.stdout.flush不jupyter笔记本工作

我关注的是打印的部分:

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()创建一个简单的“进度”输出。你可以看到他的回购输出只显示最后一集迭代10000/10000,因为使用sys.stdout.flush()

但是,当我尝试在我的笔记本jupyter运行它(我使用运行cmd命令jupyter notebook)我想sys.stdout.flush()不工作,这表明每一个印刷迭代,不会覆盖前一个:运行jupyter,使其工作时

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. 

我缺少的东西?

+0

这是'\ r's导致覆写,而不是'flush()' - 只是确保内容不会被卡在缓冲区中。由于它专注于关键组件之外的其他内容,因此如目前所写,这有点令人困惑。 –

+0

哦..我不知道那里有'\ r'符号,谢谢:)它现在清楚了 – malioboro

回答

0

Charless Duffy的评论使一切都清晰。覆盖问题不在打印功能中的冲洗功能buat上。

我找到了解决办法是刚刚从编辑打印格式:

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

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

和覆盖现在的工作

+0

如果你的标准输出是未经建构的(而不是线路缓冲,因为TTY通常是默认的),这将工作没有'flush()'*根本*。将其描述为“同花顺”有效或没有意义。 –

+0

这是正确的,我认为冲洗负责只是猜测覆盖,我不知道'\ r'符号那里,谢谢我将它编辑 – malioboro

+1

或'''打印“\ rEpisode {}/{}。 “.format(i_episode,num_episodes),'''如果是python 2.x – kampta