PDA

Visualizza la versione completa : [Python] problema nell'utilizzare l'applicazione più volte


cccicccio
10-01-2008, 17:18
Ho creato una interfaccia grafica con Tkinter, fornisco dei dati e l'indirizzo di un file di testo. Cliccando su un tasto appositamente creato richiamo una funzione presente in un altro modulo fornendole i dati appena immessi.
Questa funzione fa una serie di operazioni richiamando a sua volta altri moduli ed interpretando il file di testo.
Ultimato il suo compito con successo e tornatati all'interfaccia grafica mi accorgo che se riclicco sul pulsante di prima il tutto va in errore, cosa che non mi aspettavo.

Immaginiamo che il file di testo sia di 30 righe. Alla prima lettura tutto funziona, quando clicco sul bottone di ok la seconda volta la funzione richiamata cerca di leggere la riga 31 che ovviamente non c'è essendo il file lo stesso.
Io credevo che ognivolta che richiamo la funzione tutto si azzerasse ma evidentemente non è così.
Non so proprio come intervenire per risolvere il problema.

moaiamorfo
12-01-2008, 00:29
ciao, una buona idea sarebbe dare un'occhiata alla funzione che utilizzi per gestire il contenuto del file di testo.

saluti

cccicccio
12-01-2008, 00:53
Il file di testo è gestito da un moduto .so del quale però non ho il sorgente e che quindi non posso conoscere.

billiejoex
12-01-2008, 03:03
Ho creato una interfaccia grafica con Tkinter, fornisco dei dati e l'indirizzo di un file di testo. Cliccando su un tasto appositamente creato richiamo una funzione presente in un altro modulo fornendole i dati appena immessi.
Questa funzione fa una serie di operazioni richiamando a sua volta altri moduli ed interpretando il file di testo.
Ultimato il suo compito con successo e tornatati all'interfaccia grafica mi accorgo che se riclicco sul pulsante di prima il tutto va in errore, cosa che non mi aspettavo.

Immaginiamo che il file di testo sia di 30 righe. Alla prima lettura tutto funziona, quando clicco sul bottone di ok la seconda volta la funzione richiamata cerca di leggere la riga 31 che ovviamente non c'è essendo il file lo stesso.
Io credevo che ognivolta che richiamo la funzione tutto si azzerasse ma evidentemente non è così.
Non so proprio come intervenire per risolvere il problema.
Cosa vuol dire "va in errore"?
Se "va in errore" ci sarà un messaggio... incollalo.
Oltre al codice ovviamente.
Inoltre cerca di isolare il tuo problema e descriverlo (es: "la funzione x che dovrebbe fare ha questo problema..." invece di "tutta l'applicazione x che dovrebbe fare y ha questo problema").
Con quello che hai scritto obbiettivamente non ti si può dare una mano.

cccicccio
12-01-2008, 10:17
Vado nello specifico anche se non credo che riesca ugualmente a farmi capire.
Premetto che sto cercando di modificare un programma già esistente.

Nel programma ad un certo punto ci sono queste righe:

code, seq = gcode.parse(FilE, Canon(), 'g20 g17 g64','')
if code > gcode.MIN_ERROR:
raise SystemExit, "%s:%d: %s" % (FilE, seq, gcode.strerror(code))


dove:
FilE è una stringa con il percorso del file di testo che gli fornisco io
Canon() una Classe presente nel programma
gcode un modulo di cui ho solo il file compilato

immaginiamo che FilE abbia 1008 righe
la prima volta che il programma parte tutto funziona correttamente e seq = 1008
la seconda mi segnala l'errore dicendomi che seq = 1009
E' come se la seconda volta, pur dando un nuovo FilE, lui vada a cercare di leggere quello vecchio dall'ultima riga della volta precedente.

Non credo di essere stato più chiaro di prima.
Una soluzione possibile sarebbe quella di far in modo che una volta avviato il programma, lui esegua tutto, e si riavvii da solo... ma si può fare?

cccicccio
12-01-2008, 10:58
Se apro più terminali ed eseguo ogni volta il programma non ci sono problemi.
Si può fare in modo che sia l'applicazione stessa, ultimato il suo compito, ad aprire un altro terminale e ad avviarsi?

billiejoex
12-01-2008, 20:27
Continuo a non capire il tuo problema che mi pare descritto in maniera più incasinata di prima.
Ad ogni modo:


Una soluzione possibile sarebbe quella di far in modo che una volta avviato il programma, lui esegua tutto, e si riavvii da solo... ma si può fare?
Rattoppi di questo tipo non sono una cosa bellissima da fare.
Cmq se proprio non hai alternative il modulo subprocess dovrebbe fornirti la possibilità di lanciare sotto processi indipendenti (nel senso indipendenti dal processo che lancia il sotto processo per cui il primo può anche morire senza portarsi dietro il secondo).
Nella doc trovi molti esempi.

Loading