ユーザーがソフトウェアをインストールしているかどうかに応じて、オプションの追加機能を持つアプリケーションがあります。
Linux では、python や PyUsb のようなものがインストールされているかどうかを判断する最良の方法は何ですか?
それが役立つ場合、私は C++ Qt アプリケーションを開発しています。
ユーザーがソフトウェアをインストールしているかどうかに応じて、オプションの追加機能を持つアプリケーションがあります。
Linux では、python や PyUsb のようなものがインストールされているかどうかを判断する最良の方法は何ですか?
それが役立つ場合、私は C++ Qt アプリケーションを開発しています。
それらがパス内にあることなどを要求できます。必要な実行可能ファイルの存在を確認します(使用whichまたは類似のものを使用)。必要に応じて、実行可能ファイルの引数を使用して、必要なバージョンを確認することもできます。
これは非効率的です (フォークして/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()を使用することをお勧めします。
各ディストリビューションは独自のパッケージ マネージャーを持つことができるため、一般的に Linux でこれを行う方法を知りません。ただし、最も人気のあるディストリビューションをサポートしたい場合は、インストールされているソフトウェアをパッケージ マネージャーに問い合わせて (apt-get、rpm、および yum のサポートを開始することをお勧めします)、出力を解析して、認識しているパッケージを探すことができます。各マネージャーには、インストールされているパッケージを一覧表示する方法があります。私の提案は、次のとおりです。
apt-get --no-act check
rpm -qa
yum list installed
もう 1 つの可能性は、すべての機能をユーザーに提示し、それらを使用しようとする場合に追加機能をインストールするように促すことです (例: http://0install.netを参照)。