web-dev-qa-db-fra.com

Découvrir si un programme est installé à partir d'un script Python3

Dans mon logiciel python3, je dois vérifier si git est installé. Je sais que depuis le terminal, je peux taper:

dpkg --get-selections > filename

pour trouver quels programmes sont installés et ensuite mettre cela dans un fichier.

À partir de là, comment pourrais-je obtenir python pour voir si git est installé? Ou y a-t-il un moyen plus facile?

6
Eden Crow

Vous pouvez utiliser le module python apt, mais il vérifie uniquement si le paquet est installé. Il échouera les distributions non-deb ou si elles sont installées en dehors du gestionnaire de paquets:

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

Essayez d’exécuter git et de gérer l’exception si elle échoue:

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")

Une troisième option consisterait à essayer tous les chemins de $PATH et à vérifier si vous avez le droit d’exécution sur path/git.

4
Egil

Rechercher les fichiers installés

En supposant que nous sachions où le lanceur ou le binaire de l'application est installé par défaut, une approche facile à faire consisterait simplement à vérifier son existence, par exemple:

#! /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')

Consulter DPKG

Un autre moyen d'interroger les paquets installés consiste toutefois à consulter la gestion des paquets, dans notre cas 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

Si vous vouliez le faire de cette façon, vous pourriez faire quelque chose comme:

checkvar = 0 
 pour la ligne ouverte ("nomfichier"): 
 si "git" dans la ligne: 
 checkvar = checkvar + 1 
 print "Phrase git trouvée ", checkvar," fois "
0
RobotHumans

Je prendrais une approche différente. Afin de vérifier si Git est disponible sur un système donné, vérifiez si le binaire git existe dans PATH de l'utilisateur ou essayez simplement d'exécuter git --version. Cette vérification sera plus fiable et supportera les personnes qui (pour une raison quelconque) installent Git à partir de la source dans/usr/local/bin, ou même ~/bin.

Ce n'est pas une réponse directe à votre question, mais j'espère que cela aidera quand même. Si vous avez besoin d'aide pour coder cela en Python, faites-le moi savoir et je vous fournirai plus de détails.

0
Adam Byrtek

Vous pouvez également essayer de vérifier le résultat de which.

(Peut-être que cela ne fonctionnera pas comme personne ne l'a suggéré?)

0
Broam