检查外部应用程序可用的最佳方法是什么?

时间:2009-01-02 14:51:24

标签: c++ linux deployment dependencies

我有一个应用程序,它具有可选的附加功能,具体取决于用户是否安装了该软件。

在Linux上,确定是否安装了python和PyUsb之类的最佳方法是什么?

如果有帮助,我正在开发一个C ++ Qt应用程序。

4 个答案:

答案 0 :(得分:1)

您可以要求他们在路径等中。检查是否存在您需要的可执行文件(使用which或类似)。如果需要,您还可以使用可执行文件的参数并检查所需的版本。

答案 1 :(得分:1)

我一般都不知道为Linux做这件事的方法,因为每个发行版都有自己的包管理器。但假设您想支持最受欢迎的发行版,您可以向他们的软件包管理器查询已安装的软件(我建议首先支持apt-get,rpm和yum)并解析输出以查找您识别的软件包。每个经理都有办法列出已安装的软件包,我的建议是一个开始:

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

答案 2 :(得分: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(),它可用于从程序中获取输出以验证版本号,库或诸如此类别。

如果您需要对子进程的双向(读取和写入)访问,最好使用 pipe() fork() exec() close(),&amp; DUP2()

答案 3 :(得分:0)

另一种可能性是向用户展示所有功能,并在他们尝试使用时提示他们安装附加内容(例如,请参阅http://0install.net)。