Как лучше всего проверить, доступны ли внешние приложения? - PullRequest
0 голосов
/ 02 января 2009

У меня есть приложение, в котором есть дополнительные функции в зависимости от того, установлено ли у пользователя программное обеспечение.

В Linux, как лучше всего определить, установлены ли что-то вроде python и PyUsb?

Я разрабатываю приложение на C ++ Qt, если это поможет.

Ответы [ 4 ]

1 голос
/ 02 января 2009

Это неэффективно (требует разветвления и исполнения / bin / sh ). Там должен быть лучший путь! Но как общий подход ... Всегда есть system () .

(Не забывайте использовать WEXITSTATUS () ! Следите за тем, чтобы программы не прерывались!)

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

Существует также popen () , который может быть полезен для получения выходных данных программ для проверки номеров версий, библиотек или чего-то еще.

Если вам нужен двунаправленный (чтение и запись) доступ к подпроцессу, лучше всего использовать pipe () , fork () , exec () , close () , & dup2 () .

1 голос
/ 02 января 2009

Я не знаю, как это сделать для Linux в целом, поскольку каждый дистрибутив может иметь свой собственный менеджер пакетов. Но предполагая, что вы хотите поддерживать самые популярные дистрибутивы, вы можете запросить у менеджера пакетов установленное программное обеспечение (я бы посоветовал в качестве начала поддерживать apt-get, rpm и yum) и проанализировать выходные данные, чтобы найти пакеты, которые вы узнали. У каждого менеджера есть способ перечислить установленные пакеты, мое предложение для начала:

apt-get --no-act check
rpm -qa
yum list installed
1 голос
/ 02 января 2009

Вы можете требовать, чтобы они были в пути и т. Д. Проверьте наличие исполняемых файлов, которые вам потребуются (используя which или аналогичный). Вы также можете использовать аргументы исполняемых файлов и при необходимости проверить необходимые версии.

0 голосов
/ 02 января 2009

Еще одна возможность - представить все функции пользователю и предложить ему установить дополнительные функции, если они попытаются их использовать (например, см. http://0install.net).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...