Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: Stefano - Giugno 04, 2012, 03:42:47 pm

Titolo: trovare il path di un'eseguibile (Linux)
Inserito da: Stefano - Giugno 04, 2012, 03:42:47 pm
ho bisogno di trovare il path di un'eseguibile (non e'  detto sia installato nel path predefinito)
es: firefox, o swriter di OpenOffice.

sPath := ExtractFilePath('firefox');
o
sPath := ExtractFilePath('firefox.exe');

mi ritorna sempre il path della unit dove risiede il codice
mentre dovrebbe restituire /usr/bin/firefox

ShowMessage( 'path = ' + sPath);
visualizza sempre sPath vuoto
Titolo: Re:trovare il path di un'eseguibile (Linux)
Inserito da: nomorelogic - Giugno 04, 2012, 04:42:21 pm
ExtractFilePath estrae il percorso da un valore in ingresso che *contiene* (anche) il percorso ;)

in pratica la chiamata dovrebbe essere:
sPath := ExtractFilePath('/usr/bin/firefox/firefox');
ma il problema è proprio che non si conosce '/usr/bin/firefox' :)

purtroppo non so come si potrebbe ottenere la path di installazione di un'eseguibile, la prima cosa che mi viene in mente per linux è il comando: whereis
Titolo: Re:trovare il path di un'eseguibile (Linux)
Inserito da: Stilgar - Giugno 04, 2012, 04:53:52 pm
Utilizzare un EXPAND prima di un EXTRACT?
Fattibile?
Titolo: Re:trovare il path di un'eseguibile (Linux)
Inserito da: brunello - Giugno 04, 2012, 05:09:20 pm
leggi questo documento, dovrebbe risolvere il problema, ciao Brunello

http://wiki.lazarus.freepascal.org/Multiplatform_Programming_Guide#On_Unix_there_is_no_.22application_directory.22
Titolo: Re:trovare il path di un'eseguibile (Linux)
Inserito da: Stefano - Giugno 04, 2012, 06:08:47 pm
potrei anche usare "wich" , ma:

wich firefox  -> usr/bin/firefoc
wich vlc        -> ure-bin/vlc
wich swriter -> nessun path

vlc e firefoc sono classificati Programma
swriter e' classificato Script (anche se con doppio click si avvia)
Titolo: Re:trovare il path di un'eseguibile (Linux)
Inserito da: nomorelogic - Giugno 04, 2012, 06:15:00 pm
immagino che comunque non ti interessi l'applicazione di default?

nel senso che, ad esempio per internet, vuoi proprio firefox e non il default browser?
Titolo: Re:trovare il path di un'eseguibile (Linux)
Inserito da: Stefano - Giugno 04, 2012, 07:08:41 pm
non e' firefox o altro browser, il problema;
ma dare la possibita' all'utente di scegliere quello che vuole.

ed essendo l'utente non uno smatettone, ma uno che usa il pc in modo passivo, cercavo un modo di farlo in automatico.

chiaro poi che nel caso di Linux, firefox si trova su /usr/bin nel 99% dei casi, non credo che qualcuno si prenda la briga di spostarlo.

posso sempre fare un FileExists con il path convenzionale e se non trova il file, avvisare di configurare il Path dove e' stato messo il browser.
Titolo: Re:trovare il path di un'eseguibile (Linux)
Inserito da: Maverich - Giugno 05, 2012, 08:44:49 am
l'eseguibile si chiama soffice e si trova su /usr/bin

quindi which soffice resituisce /usr/bin
inoltre si puo' redirigere l'output su un file di testo

which soffice > esito.txt  che sara' su /home<utente>/esito.txt

leggendo il file esito.txt ci sara'  la certezza del path.
Titolo: Re:trovare il path di un'eseguibile (Linux)
Inserito da: nomorelogic - Giugno 05, 2012, 08:52:38 am
se le applicazioni da localizzare sono molte ti conviene provare con il which (unica invocazione per tutte le applicazioni da trovare) piuttosto che con FileExists, hai molta più probabilità di ottenere path valide ;)

se non vengono trovate potresti chiedere all'utente di trovarle e poi salvare il tutto in un file di configurazione
Titolo: Re:trovare il path di un'eseguibile (Linux)
Inserito da: Maverich - Giugno 05, 2012, 12:28:02 pm
infatti e' la cosa piu' sicura;
al momento pero' non riesco ad eseguirlo

da terminale non ci sono problemi ad eseguire which, ma in lazarus non va, sempre "executable not found"

alcune prove senza redirect, giusto per vedere se lo esegue.

 AProcess.CommandLine := '"/usr/bin/which"' + '" soffice"';
 AProcess.CommandLine := '"/usr/bin/which soffice"';

in alternativa si protrebbe lanciare uno script da terminale, ma come si chiama il file del Terminale ?