<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">Il giorno 04 novembre 2013 16:11, Manlio Perillo <span dir="ltr"><<a href="mailto:manlio.perillo@gmail.com" target="_blank">manlio.perillo@gmail.com</a>></span> ha scritto:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">On 04/11/2013 15:43, Riccardo Brazzale wrote:<br>
</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">
[...]<br>
        Hai ragione,<br>
        vediamo di ricapitolare:<br>
        c'e' una macchina dotata di un pulsante, un display e una porta<br>
        seriale.<br>
        L'operatore deve fare delle misurazioni (in questo caso deve<br>
        determinare, attraverso lo strumento di cui č dotata questa macchina<br>
        le caratteristiche di un foglio di carta: porositŕ e<br>
        spessore).Quando ha<br>
        posizionato il foglio, schiaccia questo pulsante e la macchina<br>
        mostra sul display i risultati.<br>
        Contemporaneamente mette gli stessi risultati a disposizione<br>
        sulla seriale.<br>
        Ora, non essendoci niente collegato alla seriale, l'operatore<br>
        trascrive<br>
        i dati su un foglio e poi provvede a caricarli su un foglio xls.<br></div>
[...]<br>
Allego il sorgente:<br>
<br>
</blockquote>
<br>
Ti consiglio di organizzare il codice usando delle funzioni; altrimenti cosě non č molto leggibile.<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">
#!/usr/bin/python<br>
# -*- coding: utf-8 -*-<br></div>
[...]<div class="im"><br>
while 1:<br>
<br>
     dati = conn.read(64)<br>
     stdscr.addstr(3, 20, dati)<br>
     stdscr.refresh()<br>
     fou.write(dati + "\n")<br>
<br>
</div></blockquote>
<br>
Come č il formato dei dati?<div class="im"><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
     stdscr.addstr(8, 5, 'PREMI Q PER USCIRE', curses.A_REVERSE)<br>
</blockquote>
<br></div>
Ok, allora premendo Q deve uscire e non semplicemente generare il file xls.<br>
<br>
Curiositŕ: che succede se spegni l'apparecchio mentre questo programma č in esecuzione?  Si blocca indefinitamente su conn.read(64) ?<div class="im"><br>
<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
     stdscr.refresh()<br>
     tasto_premuto = stdscr.getch() <== qui si blocca e attende e non va<br>
all'else<br>
<br>
     if tasto_premuto == ord('q') or tasto_premuto == ord('Q'):<br>
<br>
     # Chiudo il file temporaneo<br>
<br>
         fou.close()<br>
<br>
</blockquote>
<br></div>
Il codice seguente č un ottimo candidato ad essere spostato in una funzione, a cui passi il nome del file con i dati.<br>
<br>
> [...]<div class="im"><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
             #chiudo<br>
             curses.echo()<br>
             curses.nocbreak()<br>
             curses.curs_set(1)<br>
             curses.endwin()<br>
             sys.exit(0)<br>
</blockquote>
<br></div>
basta anche un semplice break.<br>
Anzi č meglio, cosě puoi spostare il codice di inizializzazione e terminazione delle curses fuori dal ciclo while (meglio se in funzioni separate).<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
         else:<br>
             a = 0<br>
</blockquote>
<br>
La variabile `a` a cosa serve?<div class="im"><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
             stdscr.addstr(8, 5, '                          ')<br>
             stdscr.refresh()<br>
             continue<br>
<br>
</blockquote>
<br></div>
Comunque il codice lo puoi riscrivere in questo modo, tralasciando la gestione degli errori:<br>
<br>
import sys<br>
import select<br>
<br>
<br>
# ... open serial port, init curses<br>
while 1:<br>
   rfd, wfd, efd = select.select([stdin, conn], [], [], 0)<br>
   if conn in rfd:<br>
        dati = conn.read(64)<br>
        # ... aggiorna schermo e file dati<br>
   if stdin in rfd:<br>
        cmd = stdin.read()<br>
        if cmd.strip().lower() == "q":<br>
            # ... salva il file excel<br>
            break<br>
# close serial port, close curser<div class="HOEnZb"><div class="h5"><br>
<br>
<br>
Ciao  Manlio<br>
______________________________<u></u>_________________<br>
Python mailing list<br>
<a href="mailto:Python@lists.python.it" target="_blank">Python@lists.python.it</a><br>
<a href="http://lists.python.it/mailman/listinfo/python" target="_blank">http://lists.python.it/<u></u>mailman/listinfo/python</a><br>
</div></div></blockquote></div><br>Gentilissimo.</div><div class="gmail_extra">Faccio delle prove.</div><div class="gmail_extra"><br></div><div class="gmail_extra">Grazie!</div><div class="gmail_extra"><br clear="all"><div>

<br></div>-- <br>Riccardo Brazzale<br>Linux User #299418 Linux Machine #184578<br>
</div></div>