Octave: plot su stdout senza terminare il programma

Strumenti informatici per la matematica applicata, le simulazioni, il disegno: Mathcad, Matlab, Scilab, Microcap, PSpice, AutoCad ...

Moderatori: Foto Utenteg.schgor, Foto Utentedimaios

Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59
0
voti

[1] Octave: plot su stdout senza terminare il programma

Messaggioda Foto Utentesimo85 » 28 mag 2016, 19:54

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_/

Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59
0
voti

[2] Re: Octave: plot su stdout senza terminare il programma

Messaggioda Foto Utentesimo85 » 28 mag 2016, 20:02

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:

Avatar utente
Foto UtenteEdmondDantes
11,9k 8 11 13
Disattivato su sua richiesta
Messaggi: 3619
Iscritto il: 25 lug 2009, 22:18
Località: Marsiglia
Contatta:
1
voti

[3] Re: Octave: plot su stdout senza terminare il programma

Messaggioda Foto UtenteEdmondDantes » 28 mag 2016, 20:35

simo85 ha scritto:funzione input.


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

Codice: Seleziona tutto

figure;
Il Conte di Montecristo

Se non studio un giorno, me ne accorgo io. Se non studio due giorni, se ne accorge il pubblico.

Io devo studiare sodo e preparare me stesso perché prima o poi verrà il mio momento.
Abraham Lincoln

Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59
0
voti

[4] Re: Octave: plot su stdout senza terminare il programma

Messaggioda Foto Utentesimo85 » 28 mag 2016, 20:46

Si ! Ma il risultato è lo stesso !

Avatar utente
Foto UtenteEdmondDantes
11,9k 8 11 13
Disattivato su sua richiesta
Messaggi: 3619
Iscritto il: 25 lug 2009, 22:18
Località: Marsiglia
Contatta:
0
voti

[5] Re: Octave: plot su stdout senza terminare il programma

Messaggioda Foto UtenteEdmondDantes » 28 mag 2016, 21:01

Prova ad aprire il file.m tramite octave e non da shell.
Oppure, prova

Codice: Seleziona tutto

fflush(stdout);
Il Conte di Montecristo

Se non studio un giorno, me ne accorgo io. Se non studio due giorni, se ne accorge il pubblico.

Io devo studiare sodo e preparare me stesso perché prima o poi verrà il mio momento.
Abraham Lincoln

Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59
0
voti

[6] Re: Octave: plot su stdout senza terminare il programma

Messaggioda Foto Utentesimo85 » 28 mag 2016, 21:28

Provata anche quella ! :mrgreen:
Proveró con la GUI di Octave ma non credo che dipenda da quello.

Avatar utente
Foto UtenteEdmondDantes
11,9k 8 11 13
Disattivato su sua richiesta
Messaggi: 3619
Iscritto il: 25 lug 2009, 22:18
Località: Marsiglia
Contatta:
1
voti

[7] Re: Octave: plot su stdout senza terminare il programma

Messaggioda Foto UtenteEdmondDantes » 28 mag 2016, 21:31

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.
Il Conte di Montecristo

Se non studio un giorno, me ne accorgo io. Se non studio due giorni, se ne accorge il pubblico.

Io devo studiare sodo e preparare me stesso perché prima o poi verrà il mio momento.
Abraham Lincoln

Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59
1
voti

[8] Re: Octave: plot su stdout senza terminare il programma

Messaggioda Foto Utentesimo85 » 29 mag 2016, 12:24

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_/

Avatar utente
Foto Utentealev
5.995 2 9 12
free expert
Messaggi: 6287
Iscritto il: 19 lug 2010, 14:38
Località: Altrove
0
voti

[9] Re: Octave: plot su stdout senza terminare il programma

Messaggioda Foto Utentealev » 29 mag 2016, 12:52

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

Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59
2
voti

[10] Re: Octave: plot su stdout senza terminare il programma

Messaggioda Foto Utentesimo85 » 29 mag 2016, 13:43

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_/


Torna a “Programmi applicativi: simulatori, CAD ed altro”