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