Ciao a tutti,
sto lavorando su una GUI in PyGTK che mi permetta di inserire dei parametri e chiamare un programma (scritto in C) usando la funzione os.popen().
La cosa che vorrei fare è redirigere lo standard output del programma chiamato in un box gtk.TextView() in runtime, ovvero mostrare le linee nel box man mano che sono stampate dal programma in modo asincrono, non in blocco alla fine dell'esecuzione.
es. immaginate di chiamare un programmino "work.exe" che stampa alcune linee, con qualche secondo di pausa tra esse:
E quindi richiamarlo dall'interfaccia in Python:codice:/* Program work.c */ int main (int argc, char *argv[]) { int i = 0; for (i=0; i<4; i++) { printf("Working... %d\n", i); sleep(5); } printf("END"); return(0); }
Il problema è che tutto l'output viene mostrato "in blocco", alla fine dell'esecuzione di work, non una linea ogni 5 secondi come vorrei:codice:... textview = gtk.TextView() textbuffer = textview.get_buffer() cmd = "./work.exe" for line in os.popen(cmd): textbuffer.insert_at_cursor(line) while gtk.events_pending(): gtk.main_iteration(False) ...
Come posso fare?codice:Working... 0 Working... 1 Working... 2 Working... 3 END
Quasiasi consiglio sarà apprezzato.
Clod.


Rispondi quotando