Pregunta

Tengo una aplicación que tenía extras opcionales dependiendo de si el usuario tiene el software instalado.

En Linux, ¿cuál es la mejor manera de determinar si hay algo como Python y PyUsb instalado?

Estoy desarrollando una aplicación C ++ Qt si eso ayuda.

¿Fue útil?

Solución

Esto es ineficiente (requiere bifurcación y ejecución de / bin / sh ). ¡Tiene que haber una mejor manera! Pero como un enfoque genérico ... Siempre hay system () .

(¡Recuerde usar WEXITSTATUS () ! Tenga cuidado para hacer que los programas sean ininterrumpibles!)

#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) );
}

También hay popen () , que puede ser útil para obtener resultados de programas para verificar números de versión, bibliotecas o cualquier otra cosa.

Si necesita acceso bidireccional (lectura y escritura) a un subproceso, es mejor usar pipe () , fork () , exec () , close () , & amp; dup2 () .

Otros consejos

Puede requerir que estén en la ruta, etc. Verifique la existencia de los archivos ejecutables que necesitará (usando which o similar). También puede usar los argumentos de los archivos ejecutables y verificar las versiones requeridas, si es necesario.

No conozco una forma de hacer eso para Linux en general, ya que cada distribución puede tener su propio administrador de paquetes. Pero suponiendo que desee admitir las distribuciones más populares, puede consultar a su administrador de paquetes para el software instalado (sugeriría como un comienzo para admitir apt-get, rpm y yum) y analizar la salida para buscar los paquetes que reconoce. Cada administrador tiene una manera de enumerar los paquetes instalados, mi sugerencia como inicio:

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

Otra posibilidad es presentar todas las funciones al usuario y solicitarles que instalen extras si intentan usarlos (por ejemplo, vea http://0install.net ).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top