web-dev-qa-db-ja.com

MatlabまたはOctaveでdispの出力をフラッシュするにはどうすればよいですか?

Octaveにループがあるプログラムがあります-行列に変換できるものではなく、さまざまなパラメーターで関数を実行しています。各反復の最初に、dispを使用して現在のパラメーターを出力します。

初めて実行したときに brazillion の警告が表示され、次にこれらのプリントも取得しました。片付けたので、もう見えません。私の推測では、それらはバッファ内で動かなくなっており、プログラムが終了するか、バッファがいっぱいになると表示されます。

印刷を確認できるように印刷バッファーを強制的にフラッシュする方法はありますか?

38
Nathan Fellman

Fflush(stdout)またはfflush(stderr)を使用して、バッファをdisp()からフラッシュします。

45
moastab

Moastabで述べたように、fflush(stdout)はOctaveで機能します。

MATLABでは、drawnow('update')を使用して出力をフラッシュします。

MATLABのdrawnow関数は、MATLABでグラフィカルオブジェクトの再描画を制御するユーザーにはおなじみですが、stdout stderrバッファーにも適用されます。 'update'オプションは必須ではありませんが、フラッシュを非グラフィカルキューに制限します。この詳細は、単に drawnow()のドキュメント で暗示されています。ループでfprintf呼び出しを処理することを確認しました。

28
Arthur Hebert

オクターブmore offを呼び出すと、出力のバッファリングをオフにできます。

これにより、すべての出力が画面に直接送信されるようにページ付けが無効になります。

20
Micke

セクションまたはコードの先頭に次のコマンドを配置します。

page_screen_output(0);

page_output_immediately(1);
7
Charles Valente

あなたの質問を正しく理解できれば、diary関数を使用して、すべてのセッション出力をテキストファイルにダンプできます。 diary onは録音を開始し、diary offは停止します。 diary filenameは、デフォルトの「日記」の代わりにファイル名を使用します。

OctaveとMATLABの両方に組み込まれている関数です。詳細については、help diaryを参照してください。


また、オクターブバッファーサイズを増やすこともできます。 Windowsでは、左上隅のメニューの[オクターブプロパティ]ダイアログで行うことができます。

3
yuk

drawnowはグラフを更新します。stdoutパイプでも機能するかどうかはわかりません。

disp(...)ステートメントをfprintf(stderr, ...)に変換することもできます。Octaveではstderrstdoutとは異なる方法で処理されると思います。

0
mtrw

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
0
not2qubit