Un saluto a tutto il forum.

Spero si essere chiaro e breve e di aver postato nella sezione giusta.

Ho ripreso in mano una mia vecchia applicazione che in sostanza è un' interfaccia grafica, un front end, a un programma in python che funziona su Linux a riga di comando. Al momento sono riuscito a farlo funzionare nel senso che riesco a "lanciare" il programma esterno e a raccogliere i risultati. Il programma in questione è un ripper per CD-Audio che ci mette un mucchio di tempo a campiere le sue operazioni e scrive sul terminale un mucchio di info. Ora io vorrei che queste informazioni finissero su una finestra, su una label, su qualche widget gtk anche per non lasciare l'utente senza sapere cosa succede per mezz'ora e anche, ovvio, per informarlo di eventuali errori.
Il programma esterno sono riuscito a farlo partire in due modi. Il primo, più grezzo, usando subprocess e popen e quindi attivando un processo separato. Il secondo andando a importare il modulo principale del programma esterno e passando all'unica classe disponibile i i parametri (come lista di stringhe). In realtà, visivamente, non cambia nulla. Faccio partire il tutto con un bel pulsante o un menu del mia app gtk e poi non vedo nulla per un sacco di tempo perché il programma esterno scrive i suoi messaggi di avanzamento lavori sul terminale. Ma se io lancio la mia app gtk con un bel doppio clic o dal menu, ad esempio, di Ubuntu, il terminale non c'è :-)

Quindi ho in sostanza due problemi:
1) come intercettare ciò che il programma esterno scrive;
2) quale oggetto gtk usare per visualizzare "in tempo reale" ciò che il programma esterno scrive.

Preciso che il programma esterno è, nelle mie limitate capacità, difficile sa subclassare. Dovrei praticamente riscrivere mezzo codice solo per avere a disposizione le classi di quel programma che, per come l'ha scritto l'autore, preleva l'imput dell'utente (i vari comandi previsti e le opzioni) facendo parsing e usando funzioni di logging un po' astruse per me. In pratica riesco solo a simulare l'inserimento dei comandi nella funzione "main" dell'applicazione.

Il programma esterno che sto cercando di "ingabbiare" è questo:
https://github.com/thomasvs/morituri

Il mio front end è questo:
https://github.com/giorgiofranceschi/xaudiocopy

Un grazie anticipato a chi vorrà aiutarmi. Per ulteriori info sono qui.

Giorgio
« Ultima modifica: Giugno 17, 2013, 13:56 da Amarvudol »