Newsgroup: it.comp.os.linux.development
Titolo: Eseguire un programma e catturarne l'output

Dovrei fare questo: eseguire un programma e catturarne l'output. 
Eventualmente anche gestire l'input, ma non e' importante.
Qualcuno sa aiutarmi? Se l'avete va bene anche qualche procedurina gia' 
pronta (ma niente di complesso).
Ciao e grazie



Se non dai altre informazioni è un po'difficile risponderti...per come
l'hai messa tu basta che fai 
nomeprogramma > nomefileoutput
e troverai in nomefileoutput tutto l'output del tuo programma...ovviamente
questo in consolle...spiega meglio cosa vuoi ottenere


man script
Ciao,
-- 
       Roberto Divia`             Love at first sight is one of the greatest
       =============             labour-saving devices the world has ever seen.
Mailbox: C02110                 CERN-European Organization for Nuclear Research
E-mail: 
Robert...@cern.ch
           CH-1211 GENEVE 23, Switzerland

> nomeprogramma > nomefileoutput
Ehehe ok, ma devo farlo da programma.
Immagino che devo creare in qualche modo un processo e redirigerne 
l'output (con le pipe?)
Grazie



cioè, vuoi fare in modo che tutto l'output di stdout sia rediretto su un
file, ma dall'interno del tuo programma? è questo che vuoi fare? se è
così, guarda man reopen, e fai in modo da sostituire lo stdout nel file di
tua scelta...

 tua scelta...
No, devo catturare l'output, per farci il parsing o mostrarlo su una 
finestra (il programma che devo avviare e' testuale).
Qualche suggerimento ?

> stdout nel file di tua scelta...
MSX> No, devo catturare l'output, per farci il parsing o mostrarlo su
MSX> una finestra (il programma che devo avviare e' testuale).
MSX> Qualche suggerimento ?
Oh mamma. Cosa mi tocca leggere :) :) :) :).
progam1 | program2 
Se vogliamo andare sul difficile, usare popen() all'interno di program2...
 /\            ___
/___/\__|_|\_|__|___Gian Uberto Lauri_____________________
  //--\ | | \|  |   Integralista GNUslamico e fancazzista 
\/

 Oh mamma. Cosa mi tocca leggere :) :) :) :).
Beh che c'e' di strano ?

> Oh mamma. Cosa mi tocca leggere :) :) :) :).
MSX> Beh che c'e' di strano ?
La command line di Linux e` fatta da comandi ciascuno dei quali e` in
grado di operare sull'output del precedente.
Anche un programma con output grafico puo` ricevere in input l'output
di un'altro programma.
Le pipe sono fondamentali in Unix come in Linux. Le aveva anche il DOS
(anche se fatte da cani) poi i geni in quel di Redmond hanno detto che
non servivano.
E in ogni caso non era molto seria.


 
a quanto ho capito a lui serve di catturare l'output dall'interno del
programma stesso, e poi farci altro...
Ora, mi rivolgo all'autore del post originale: MSX, ti preghiamo in
ginocchio, SPIEGACI cosa cavolo ti serve! :-)
Scherzo, cmq se fai come ti ho suggerito un paio di post più su, ovvero
redirigere l'output su un file utilizzando reopen(), dopo puoi leggere
quel file e farci tutto quello che vuoi!

 ginocchio, SPIEGACI cosa cavolo ti serve! :-)
Eheheh e' un segreto di stato!
Scherzo, praticamente devo fare un front-end per il programmino che 
attiva la connessione ad internet che ho.
Non posso usare il semplice "prog1 | prog2", perche' l'utente deve 
decidere se e quando attivare il programma tramite i pulsanti 
dell'interfaccia.
Poi devo catturare l'output per vedere cosa succede e se il collegamento 
va a buon fine.
Cmq ho trovato come bisogna fare: si usano due coppie di pipe, si forka 
il processo, si chiudono le pipe inutili su padre e figlio, si usa dup2 
per redirigere l'output (e/o l'input) e infine si chiama exec (o le sue 
varianti) sul figlio. (piu' facile a dirsi che a farsi)