Octaveにループがあるプログラムがあります-行列に変換できるものではなく、さまざまなパラメーターで関数を実行しています。各反復の最初に、disp
を使用して現在のパラメーターを出力します。
初めて実行したときに brazillion の警告が表示され、次にこれらのプリントも取得しました。片付けたので、もう見えません。私の推測では、それらはバッファ内で動かなくなっており、プログラムが終了するか、バッファがいっぱいになると表示されます。
印刷を確認できるように印刷バッファーを強制的にフラッシュする方法はありますか?
Fflush(stdout)またはfflush(stderr)を使用して、バッファをdisp()からフラッシュします。
Moastabで述べたように、fflush(stdout)
はOctaveで機能します。
MATLABでは、drawnow('update')
を使用して出力をフラッシュします。
MATLABのdrawnow
関数は、MATLABでグラフィカルオブジェクトの再描画を制御するユーザーにはおなじみですが、stdout stderrバッファーにも適用されます。 'update'
オプションは必須ではありませんが、フラッシュを非グラフィカルキューに制限します。この詳細は、単に drawnow()のドキュメント で暗示されています。ループでfprintf呼び出しを処理することを確認しました。
オクターブ:more off
を呼び出すと、出力のバッファリングをオフにできます。
これにより、すべての出力が画面に直接送信されるようにページ付けが無効になります。
セクションまたはコードの先頭に次のコマンドを配置します。
page_screen_output(0);
page_output_immediately(1);
あなたの質問を正しく理解できれば、diary関数を使用して、すべてのセッション出力をテキストファイルにダンプできます。 diary on
は録音を開始し、diary off
は停止します。 diary filename
は、デフォルトの「日記」の代わりにファイル名を使用します。
OctaveとMATLABの両方に組み込まれている関数です。詳細については、help diary
を参照してください。
また、オクターブバッファーサイズを増やすこともできます。 Windowsでは、左上隅のメニューの[オクターブプロパティ]ダイアログで行うことができます。
drawnow
はグラフを更新します。stdout
パイプでも機能するかどうかはわかりません。
disp(...)
ステートメントをfprintf(stderr, ...)
に変換することもできます。Octaveではstderr
はstdout
とは異なる方法で処理されると思います。
here およびその他の場所から、Octaveに即時出力を取得する方法が少なくとも5つあります。
次のoneを使用します。
%---------------------------
% Turn OFF output buffering
%---------------------------
more off % command & NOT shown in output
PAGER = "less" % built-in var - shown in output
page_screen_output = 0 % built-in var - shown in output
page_output_immediately = 1 % built-in var - shown in output
fflush(stdout) % Need to call after each "output" line