2010-04-13 4 views
31

Ich habe ein Programm in Octave, das eine Schleife hat - eine Funktion mit verschiedenen Parametern, nicht etwas, das ich in Matrizen verwandeln kann. Zu Beginn jeder Iteration drucke ich die aktuellen Parameter mit disp.Wie kann ich die Ausgabe von DISP in Matlab oder Octave spülen?

Die ersten Male, die ich es lief hatte ich eine brazillion Warnungen, und dann habe ich auch diese Drucke. Jetzt, wo ich sie aufgeräumt habe, sehe ich sie nicht mehr. Meine Vermutung ist, dass sie in einem Puffer hängen bleiben, und ich werde sie sehen, wenn das Programm endet oder der Puffer füllt.

Gibt es eine Möglichkeit, eine Spülung des Druckpuffers zu erzwingen, damit ich meine Ausdrucke sehen kann?

+0

Hier ist mehr, auf Paging einschließlich info: http://www.chemie.fu-berlin.de/chemnet/use/ info/octave/octave_22.html – Nucular

+0

Passiert das auch in Matlab? –

Antwort

39

Verwenden Sie fflush (stdout) und/oder fflush (stderr), um den Puffer von disp() zu löschen.

+10

Aus Neugier, weißt du, ob es ein Matlab-Äquivalent zu fflush() gibt? Ich würde gerne dasselbe machen, aber ich benutze Matlab, nicht Octave, und es gibt keine fflush() -Funktion. –

+3

In MATLAB verwenden Sie 'drawnow ('update')', um die Ausgabe zu löschen. –

3

Wenn ich Ihre Frage richtig verstehe, können Sie Tagebuch Funktion verwenden, um alle Sitzungsausgabe in eine Textdatei auszugeben. diary on beginnt mit der Aufnahme und diary off stoppt. diary filename wird Dateiname anstelle von Standard "Tagebuch" verwenden.

Es ist Build-in Funktion in Octave und MATLAB. Für weitere Details siehe help diary.


Sie können auch Oktavpuffergröße erhöhen. Unter Windows können Sie dies im Oktav-Eigenschaften-Dialog vom oberen linken Eckmenü aus tun.

0

drawnow werden Graphen zu aktualisieren, ich bin mir nicht sicher, ob es auf der stdout Pipe auch funktioniert.

Sie könnten auch Ihre disp(...) Aussagen zu fprintf(stderr, ...) konvertieren, denke ich stderr von stdout auf Octave unterschiedlich gehandhabt wird.

26

Wie von moastab erwähnt, funktioniert fflush(stdout) für Octave.

Verwenden Sie in MATLAB drawnow('update'), um den Ausgang zu spülen.

Die Funktion drawnow von MATLAB ist für diejenigen bekannt, die die neu gezeichneten grafischen Objekte in MATLAB steuern möchten, aber auch für die stdout stderr-Puffer. Die Option 'update' ist nicht erforderlich, beschränkt jedoch das Löschen auf nicht grafische Warteschlangen. Dieses Detail ist lediglich in der drawnow() documentation impliziert; Ich habe es überprüft, um mit fprintf-Aufrufen in einer Schleife zu arbeiten.

19

Octave: Sie können die Pufferung der Ausgabe deaktivieren, indem Sie more off aufrufen.

Dadurch wird die Paginierung deaktiviert, sodass alle Ausgaben direkt an den Bildschirm gesendet werden.

5

Setzen Sie die folgenden Befehle am Anfang Ihres Abschnitts oder Code:

page_screen_output(0); 

page_output_immediately(1); 
Verwandte Themen