web-dev-qa-db-ja.com

Python3スクリプトからプログラムがインストールされているかどうかを確認する

Python3ソフトウェア内で、gitがインストールされているかどうかを確認する必要があります。端末から次のように入力できることを知っています。

dpkg --get-selections > filename

インストールされているプログラムを見つけて、それをファイルに入れます。

そこから、gitがインストールされているかどうかを確認するためにpythonを取得するにはどうすればよいですか?それとも簡単な方法はありますか?

6
Eden Crow

python aptモジュールを使用できますが、パッケージがインストールされているかどうかのみをチェックします。非debディストリビューションが失敗するか、パッケージマネージャーの外部にインストールされている場合:

import apt
cache = apt.Cache()
cache.open()
 cache["git-core"].is_installed# Evaluates true if git is installed

Gitを実行し、失敗した場合は例外を処理してください:

import subprocess

try:
    # pipe output to /dev/null for silence
    null = open("/dev/null", "w")
    subprocess.Popen("git", stdout=null, stderr=null)
    null.close()

except OSError:
    print("git not found")

3番目のオプションは、$PATHのすべてのパスを試し、path/gitに対するexec許可があるかどうかをテストすることです。

4
Egil

インストールされたファイルを探す

アプリケーションのランチャーまたはバイナリがデフォルトでインストールされている場所がわかっていると仮定すると、簡単に実行できるアプローチは、次のようにその存在を確認することです。

#! /usr/bin/env python3
#
# Query package state by installation path

import os.path
path = '/usr/bin/git'


def query_package(path):
    if os.path.exists(path):
        print('Git is ready to use')
    else:
        print('please install Git')

DPKGに相談する

ただし、インストール済みパッケージを照会する別の方法は、パッケージ管理(この場合はdpkg)を参照することです。

#! /usr/bin/env python3
#
# Query package state by dpkg status

import subprocess
package = 'git'

def query_package(package):
    status = subprocess.getstatusoutput("dpkg-query -W -f='${Status}' " + package)
    if not status[0]:
        print(status[1]) # package is installed
    else:
        print(status[1])
1
Takkat

そのようにしたい場合は、次のようなことができます:

checkvar = 0 
 open( "filename")の行の場合:
 if "git"の行の場合:
 checkvar = checkvar + 1 
 print "Phrase git found 「、checkvar、「回」
0
RobotHumans

私は別のアプローチを取ります。特定のシステムでGitが使用可能かどうかを確認するには、gitバイナリがユーザーのPATHに存在するかどうかを確認するか、git --versionを実行してみてください。このチェックはより信頼性が高く、(何らかの理由で)/ usr/local/bin、または〜/ binのソースからGitをインストールするユーザーをサポートします。

これはあなたの質問に対する直接的な答えではありませんが、とにかく役立つことを願っています。 Pythonでのコーディングにヘルプが必要な場合はお知らせください。詳細を説明します。

0
Adam Byrtek

whichの出力を確認することもできます。

(おそらく他の誰もそれを提案していないので、それはうまくいかないでしょうか?)

0
Broam