【问题标题】:What is the best way to check that external applications are available?检查外部应用程序是否可用的最佳方法是什么?
【发布时间】:2010-09-29 05:58:54
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ linux deployment dependencies


    【解决方案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().

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

        • 有一个警告:如果用户安装的东西没有使用相应的包管理器(直接使用 make install ),你不会检测到它。
        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-09-16
          • 1970-01-01
          • 1970-01-01
          • 2010-09-13
          • 2021-12-29
          • 2010-12-12
          相关资源
          最近更新 更多