Bonjour,
J’utilise le programme apt-get
pour installer des paquets dans un script en Python3. Voici la fonction que j’utilise :
apt_install_auto = ['/usr/bin/apt-get', 'install', '--assume-yes']
def special_install_package (packages, target_release = None, reinstall = False, debconf = None):
'''
Fais une installation tellement spéciale qu'elle n'est pas disponible via libapt
Éviter l'utilisation de cette fonction pour une installation classique (sans aucune utilisation des options marquées d'un +)
packages chaîne de caractère pour un paquet ou liste itérable pour une liste de paquets
target_release + une chaîne de caractère définissant la distribution cible (voir l'option -t dans apt-get (8))
reinstall défini si le paquet doit être réinstallé en cas de présence préalable de celui-ci
Le paramètre debconf sert à passer une configuration debconf au besoin avant l'installation du paquet
'''
log ('', title = __name__ + '.special_install_package', level = 0)
tl = ''
to = []
rl = ''
ro = []
# Je trouve cette méthode d'installation pas très top, je préfèrerai qu'on utilise la classique install () si l'installation n'a rien de spécial
# Ajouter les éventuels nouveaux paramètres spéciaux ici
if target_release is None:
log ('!!! ATTENTION !!!\nInstallation de paquets non spéciale (cette fonction n\'a pas ce but) !\n!!! ATTENTION !!!\nLes paquets seront tout de même installés, mais merci de le faire à l\'aide de la fonction pas spéciale', title = __name__ + '.special_install_package', level = 1)
if type (debconf) == str:
set_debconf (debconf)
if type (packages) == str:
packages = (packages,)
if type (target_release):
tl = ' à partir de la distribution ' + target_release
to = ['--target-release', target_release]
if reinstall:
rl = ' et réinstallation si paquet(s) déjà installé(s)'
ro = ['--reinstall', ]
log ('Installation spéciale des paquets ' + str (packages) + tl + rl + '…', title = __name__ + '.special_install_package', level = 0)
cmd = apt_install_auto + ro + to + list (packages)
if call (cmd):
log ('Installation spéciale exécutée', title = __name__ + '.special_install_package', level = 0)
return (True)
else:
log ('Installation spéciale terminée avec une erreur', title = __name__ + '.special_install_package', level = 2)
return (False)
Pour ceux qui ne sont pas familier de python, je lance une commande /usr/bin/apt-get install --assume-yes <paquets>
. Le problème, c’est que quand je lance ça avec un paquet qui est déjà installé, le programme apt-get
retourne une erreur et la fonction se termine donc avec une erreur alors que tout s’est bien passé.
Existe-t-il une option pour ne pas avoir d’erreur dans ce cas ?