2009-01-02 5 views
0

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

В Linux, что является лучшим способом определить, установлено ли что-то вроде python и PyUsb?

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

ответ

1

Это неэффективно (требуется разветвление и выполнение /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(), что может быть полезно для захвата выход из программы для проверки версии номера, библиотеки или еще много чего.

Если вам нужно двунаправленные (чтение & записи) доступ к подпроцессу, лучше использовать трубы(), вилки(), Exec(), близко(), & dup2().

1

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

1

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

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

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

0

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

Смежные вопросы