web-dev-qa-db-fra.com

Comment puis-je vider la sortie de disp dans Matlab ou Octave?

J'ai un programme dans Octave qui a une boucle - exécutant une fonction avec divers paramètres, pas quelque chose que je peux transformer en matrices. Au début de chaque itération, j'imprime les paramètres actuels en utilisant disp.

La première fois que je l'ai exécuté, j'ai eu un brazillion avertissements, puis j'ai également obtenu ces impressions. Maintenant que je les ai nettoyés, je ne les vois plus. Je suppose qu'ils sont coincés dans un tampon, et je les verrai lorsque le programme se terminera ou que le tampon se remplira.

Existe-t-il un moyen de forcer un vidage du tampon d'impression afin que je puisse voir mes impressions?

38
Nathan Fellman

Utilisez fflush (stdout) et/ou fflush (stderr) pour vider le tampon de disp ().

45
moastab

Comme mentionné par moastab, fflush(stdout) fonctionne pour Octave.

Dans MATLAB, utilisez drawnow('update') pour vider la sortie.

La fonction drawnow de MATLAB sera familière à ceux qui contrôlent le redessin des objets graphiques dans MATLAB, mais elle s'applique également aux tampons stdout stderr. L'option 'update' N'est pas requise, mais limite le vidage aux files d'attente non graphiques. Ce détail est simplement implicite dans la documentation drawow () ; Je l'ai vérifié pour fonctionner sur les appels fprintf en boucle.

28
Arthur Hebert

Octave: Vous pouvez désactiver la mise en mémoire tampon de la sortie en appelant more off.

Cela désactivera la pagination de sorte que toutes les sorties soient envoyées directement à l'écran.

20
Micke

Mettez les commandes suivantes au début de votre section ou de votre code:

page_screen_output(0);

page_output_immediately(1);
7
Charles Valente

Si je comprends bien votre question, vous pouvez utiliser la fonction agenda pour vider toutes les sorties de session dans un fichier texte. diary on commencera l'enregistrement et diary off s'arrêtera. diary filename utilisera le nom de fichier au lieu du "journal" par défaut.

C'est une fonction intégrée dans Octave et MATLAB. Pour plus de détails, voir help diary.


Vous pouvez également augmenter la taille du tampon Octave. Sous Windows, vous pouvez le faire dans la boîte de dialogue Propriétés d'Octave à partir du menu du coin supérieur gauche.

3
yuk

drawnow entraînera la mise à jour des graphiques, je ne sais pas si cela fonctionne également sur le tube stdout.

Vous pouvez également convertir vos instructions disp(...) en fprintf(stderr, ...), je pense que stderr est géré différemment de stdout sur Octave.

0
mtrw

De ici et ailleurs, il existe au moins 5 méthodes pour obtenir une sortie immédiate, dans Octave.

Utilisez l'un des éléments suivants:

%---------------------------
% 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