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:
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);
}
E quindi richiamarlo dall'interfaccia in Python:
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)
...
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:
Working... 0
Working... 1
Working... 2
Working... 3
END
Come posso fare?
Quasiasi consiglio sarà apprezzato. 
Clod.