我有一個應用程序具有可選附加功能,具體取決於用戶是否安裝了軟件。什麼是檢查外部應用程序可用的最佳方法?
在Linux是什麼,以確定是否安裝了像Python和PyUsb的最佳方式?
我正在開發一個C++ Qt應用程序,如果有幫助。
我有一個應用程序具有可選附加功能,具體取決於用戶是否安裝了軟件。什麼是檢查外部應用程序可用的最佳方法?
在Linux是什麼,以確定是否安裝了像Python和PyUsb的最佳方式?
我正在開發一個C++ Qt應用程序,如果有幫助。
這是低效的(需要分叉和執行/bin/sh)。一定有更好的方法!但作爲一種通用的方法......系統總是有()。
(記住使用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(),它可以從程序來驗證版本搶奪輸出有用數字,圖書館或什麼。
如果您需要雙向(讀&寫)訪問子,最好使用管(),fork()的,EXEC(),接近(),& DUP2()。
可以要求他們在路徑等。檢查可執行文件,你需要(使用which
或類似)的存在。如果需要,您還可以使用可執行文件的參數並檢查所需的版本。
我不知道的方式做到這一點對於一般的Linux,因爲每個發行版都可以有自己的包管理器。但是假設你想支持最受歡迎的發行版,你可以查詢他們的軟件包管理器以獲得已安裝的軟件(我建議作爲開始支持apt-get,rpm和yum)並解析輸出以查找你認識的軟件包。每個經理有辦法列出已安裝的軟件包,我的建議是一個開始:
apt-get --no-act check
rpm -qa
yum list installed
另外一個可能性是存在的所有功能給用戶,提示他們,如果他們試圖用它們來安裝額外(如見http://0install.net)。
有一個警告:如果用戶安裝了一些不使用相應的軟件包管理器(使用make直接安裝),你不會發現它。 – 2009-01-02 15:17:20