Domanda

Ho un'applicazione che ha degli extra opzionali a seconda che l'utente abbia installato il software.

Su Linux qual è il modo migliore per determinare se è installato qualcosa come Python e PyUsb?

Sto sviluppando un'applicazione Q ++ C ++ se questo aiuta.

È stato utile?

Soluzione

Questo è inefficiente (richiede il fork e l'esecuzione di / bin / sh ). Deve esserci un modo migliore! Ma come approccio generico ... c'è sempre system () .

(Ricorda di usare WEXITSTATUS () ! Fai attenzione a rendere i programmi ininterrotti!)

#define SHOW(X)  cout << # X " = " << (X) << endl

int main()
{
  int status;

  SHOW( status = system( "which grep > /dev/null 2>&1" ) );
  SHOW( WEXITSTATUS(status) );

  SHOW( status = system( "which no_matching_file > /dev/null 2>&1" ) );
  SHOW( WEXITSTATUS(status) );
}

Esiste anche popen () , che può essere utile per catturare l'output di programmi per verificare numeri di versione, librerie o quant'altro.

Se hai bisogno di un accesso bidirezionale (lettura e scrittura) a un sottoprocesso, è meglio usare pipe () , fork () , exec () , close () , & amp; dup2 () .

Altri suggerimenti

È possibile richiedere che si trovino nel percorso, ecc. Verificare l'esistenza dei file eseguibili richiesti (utilizzando quale o simili). Puoi anche utilizzare gli argomenti dei file eseguibili e verificare anche le versioni richieste, se necessario.

Non sono a conoscenza di un modo per farlo per Linux in generale, poiché ogni distribuzione può avere il proprio gestore di pacchetti. Ma supponendo che tu voglia supportare le distro più popolari, puoi interrogare il loro gestore di pacchetti per il software installato (suggerirei come inizio per supportare apt-get, rpm e yum) e analizzare l'output per cercare i pacchetti che riconosci. Ogni gestore ha un modo per elencare i pacchetti installati, il mio suggerimento come inizio:

apt-get --no-act check
rpm -qa
yum list installed

Un'altra possibilità è quella di presentare tutte le funzionalità all'utente e chiedere loro di installare extra se tentano di usarle (ad es. vedi http://0install.net ).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top