0

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

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

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

4

4 回答 4

1

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

于 2009-01-02T15:00:32.887 回答
1

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

apt-get --no-act check
rpm -qa
yum list installed
于 2009-01-02T15:13:57.210 回答
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()和 & dup2()

于 2009-01-02T16:19:26.767 回答
0

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

于 2009-01-02T15:20:37.637 回答