Pagina 1 di 1

Octave: plot su stdout senza terminare il programma

Inviato: 28 mag 2016, 19:54
da simo85
Ho un problemino con Octave. In realtà ce l'ho quasi sempre avuto (dico quasi perché in passato ricordo di aver notato un comportamento differente).

Prendiamo per esempio uno scritp semplice semplice:

Codice: Seleziona tutto

N = 32
n = 0:N-1;
x = cos(2*pi*n/N);
stem(n,x); hold on;


se salvo questo script in un file file.m ed eseguo:

Codice: Seleziona tutto

octave file.m

si vede che la funzione stem (ma potrebbe essere anche plot etc.) viene eseguita. Ma per un millisecondo (si fa per dire) e sparisce.

Conosco la soluzione (style Windows) con

Codice: Seleziona tutto

pause();

ma mi blocca totalmente l'esecuzione, ossia, se voglio chiudere lo script devo andare di forza bruta con un Ctrl-C. :?

L'opzione per argomento

Codice: Seleziona tutto

--persist

è altrettanto problematica. Chiudo l'immagine ed octave mi ridireziona alla shell di octave. :?

Esiste un'altra funzione che permetta la persistenza del plot sullo stdout, che magari non conosco ?
Ringrazio in anticipo.

O_/

Re: Octave: plot su stdout senza terminare il programma

Inviato: 28 mag 2016, 20:02
da simo85
Per il momento risolvo con la funzione input. A fine file:

Codice: Seleziona tutto

input(" ");


Sicuramente non è il modo migliore di usarla ma fa il suo dovere. :mrgreen:

Re: Octave: plot su stdout senza terminare il programma

Inviato: 28 mag 2016, 20:35
da EdmondDantes
simo85 ha scritto:funzione input.


come facevo io quando programmavo le "caramelle" in C.
Hai provato la funzione

Codice: Seleziona tutto

figure;

Re: Octave: plot su stdout senza terminare il programma

Inviato: 28 mag 2016, 20:46
da simo85
Si ! Ma il risultato è lo stesso !

Re: Octave: plot su stdout senza terminare il programma

Inviato: 28 mag 2016, 21:01
da EdmondDantes
Prova ad aprire il file.m tramite octave e non da shell.
Oppure, prova

Codice: Seleziona tutto

fflush(stdout);

Re: Octave: plot su stdout senza terminare il programma

Inviato: 28 mag 2016, 21:28
da simo85
Provata anche quella ! :mrgreen:
Proveró con la GUI di Octave ma non credo che dipenda da quello.

Re: Octave: plot su stdout senza terminare il programma

Inviato: 28 mag 2016, 21:31
da EdmondDantes

Codice: Seleziona tutto

f = figure;
set(f, "visible", "off")

Da inserire prima del plot.
Secondo me il problema e' quello. Eseguendo da terminale, una volta terminato lo script l'applicazione viene chiusa. Infatti, con input non succede perché il programma rimane in attesa di ricevere l'informazione.

Re: Octave: plot su stdout senza terminare il programma

Inviato: 29 mag 2016, 12:24
da simo85
Ciao Foto UtenteEdmondDantes, grazie ancora per l'aiuto.

Però nemmeno la soluzione con la funzione set, funziona. #-o
Penso che mi terrò la soluzione del mesaggio 2. Non è il caso di perderci tempo cosi tanto.

Ti ringrazio nuovamente.

O_/

Re: Octave: plot su stdout senza terminare il programma

Inviato: 29 mag 2016, 12:52
da alev
Ho dato un'occhiata alla pagina di GNU e per messaggi in output si parla della funzione disp(x)

Naturalamente, il formato dell'output potrebbe richiedere manipolazione con gli strumenti di shell, ma potrebbe essere meglio di niente

Re: Octave: plot su stdout senza terminare il programma

Inviato: 29 mag 2016, 13:43
da simo85
No, la funzione disp in questo caso non risolve nulla.
A me serve più che altro la persistenza.

In passato quando aggiungevo la funzione di stampa su file, ottenevo anche la persistenza. Ma poi mi ritrovavo ogni volta con decine di immagini da cancellare..

Comunque, mentre scrivevo ho trovato la soluzione, cercando e leggendo nel manuale. :D
Si deve usare la funzione waitfor, che prende come argomento un handler dell'immagine.

Per esempio cosi:

Codice: Seleziona tutto

N = 32;
n = 0:N-1;
x = sin(2*pi*n/N);
fig = figure(1);
stem(n,x); hold on;
waitfor(fig);


ed era quello che cercavo: aspettare che l'immagine vena distrutta (cliccando sulla solita x),

O_/