Gambas-it
Archivi (sola lettura) => Domande tecniche (Gambas 2) => Topic aperto da: guiodic - 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.
-
Se l'installazione mette l'eseguibile in uno dei path standard per i binari (o librerie), credo sia sufficiente il comando *nix:
il ritorno è, di norma, una stringa del tipo:
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).
-
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...
-
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.
-
ok... funziona :)
altro problema
programma_esterno.value nn mi restituisce nulla :(
forse è un problema del programma, devo controllare.
-
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.