2017-01-27 3 views
0

だから私は、このレポからコードを再実行したいjupyterノートでは動作しませsys.stdout.flush: 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()を使用して単純な「進行」出力を作成します。あなたは、私が考えて(私はCMDコマンドjupyter notebookを使用して実行))(sys.stdout.flushを使用しているので、それが唯一の最後のエピソードの繰り返し10000/10000を示して彼のレポからの出力を参照してください

しかし、私は私のjupyterノートでそれを実行しようとすることができます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だ

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

と上書き作品に

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

'flush()'ではなく、内容がバッファ内でスタックされていないことを確認します。キーコンポーネント以外のものに焦点を当てているので、これは現在書かれているように少し混乱しています。 –

+0

ああ..私はそこに '\ r'記号がないことを知っています。ありがとう:)今はっきりしています – malioboro

答えて

0

Charless Duffyコメントはすべてを明確にします。上書きの問題は、印刷機能のフラッシュ機能ではありません。

私は解決策がちょうどから印刷フォーマットを編集しているが見つかりました:今

+0

stdoutが(通常はTTYのデフォルトのようにラインバッファではなく)unbuferされていれば、 'flush()' *を実行します。それをうまく動作させるか、しないかを「フラッシュ」と記述することはあまり意味がありません。 –

+0

そうです、私はflushが推測だけで上書きする責任があると思いますが、私はそこに '\ r'シンボルを認識していませんでしたので、 – malioboro

+1

または' 'print" \ rEpisode {}/{} ".format(i_episode、num_episodes)、' '' '' '' python 2.xの場合 – kampta