Autore Topic: Chiamare un programma esterno (caso particolare)  (Letto 1913 volte)

Offline guiodic

  • Gamberetto
  • *
  • Post: 11
    • Mostra profilo
    • http://guiodic.wordpress.com/
Chiamare un programma esterno (caso particolare)
« il: 04 Febbraio 2009, 12:24:29 »
Salve a tutti, sto scrivendo un programma che ha bisogno di chiamare un programma esterno già compilato tramite exec.

Niente di più facile se si parla di un programma già sulla macchina o in /usr/bin...

Il mio problema è che devo chiamare invece un programma che ho compilato io e non si trova in nessuna distro.

Ho provato a metterlo in "dati" e riesco a chiamarlo mettendoci il path assoluto (/home/utente/progetti_gambas/programma/eseguibile).

Ho provato mettendo ./eseguibile ma niente da fare...

Vorrei inoltre fare in modo che venga trovato anche quando poi creerò i pacchetti per le distro....

Come posso fare?

Grazie per le risposte.

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Chiamare un programma esterno (caso particolare)
« Risposta #1 il: 04 Febbraio 2009, 14:25:17 »
Se l'installazione mette l'eseguibile in uno dei path standard per i binari (o librerie), credo sia sufficiente il comando *nix:
Codice: [Seleziona]

whereis

il ritorno è, di norma, una stringa del tipo:
Codice: [Seleziona]

: <...>

se non lo trova, ritorna solo il nome.

Di norma, le installazioni sono fatte in modo da creare delle sottodirectory all'interno dei soliti path:

/bin
/lib
/usr/bin
/usr/local/bin
/usr/lib
/usr/local/lib
/usr/doc
/usr/local/doc
/usr/include
/usr/local/include
/usr/share/
...
e via dicendo...

Il fatto, poi, di chiamare un eseguibile (o altro), usando il path assoluto (o relativo), dipende da come è impostata la tua applicazione. Tieni conto che la classe Application di Gambas, ritorna sia il path dove il programma è installato, sia da dove è eseguito, per cui a te le modalità d'uso.
L'uso del "./" è valida solo dalla directory stessa del programma eseguibile, altrimenti è necessario usare l'indirizzo assoluto, o una variabile d'ambiente conosciuta (es. $HOME).

Offline guiodic

  • Gamberetto
  • *
  • Post: 11
    • Mostra profilo
    • http://guiodic.wordpress.com/
Re: Chiamare un programma esterno (caso particolare)
« Risposta #2 il: 04 Febbraio 2009, 14:36:37 »
Il programma esterno io ce l'ho nella cartella del progetto di gambas.

Quello che non riesco a fare è individuare un path relativo e non assoluto.

Comunque con Application.path o .dir penso che forse ci siamo...

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Chiamare un programma esterno (caso particolare)
« Risposta #3 il: 04 Febbraio 2009, 14:42:29 »
Esatto! Application.Path ti ritorna il path dove si trova l'eseguibile che, in questo caso, è la directory del progetto.
In caso di installazione, l'eseguibile verrà messo da tutt'altra parte, per cui tieni conto di questo.

Offline guiodic

  • Gamberetto
  • *
  • Post: 11
    • Mostra profilo
    • http://guiodic.wordpress.com/
Re: Chiamare un programma esterno (caso particolare)
« Risposta #4 il: 04 Febbraio 2009, 14:46:34 »
ok... funziona :)

altro problema

programma_esterno.value nn mi restituisce nulla :(

forse è un problema del programma, devo controllare.

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Chiamare un programma esterno (caso particolare)
« Risposta #5 il: 05 Febbraio 2009, 14:23:07 »
Che roba è "programma_esterno.value" ?

Un eseguibile, sotto Linux, ritorna di norma un codice di errore numerico (0=nessun errore); eventualmete emette dei messaggi di stato, di warning o di errore a seconda dei casi.
Tutto quanto, codice e messaggi, possono venir catturati dai comandi EXEC (o SHELL, vedi doc).
E' comunque probabile che qualche programma, costruito in mod fuori standard, ritorni sempre 0, anche se si verifica un errore; in questo caso il problema è capire dai messaggi che emette, o dall'esito di un'operazione fisica su qualche cosa, se è andato tutto bene o meno.