10
votes

Utilisation de "apt-get Installer xxx" à l'intérieur du script Python

Actuellement, j'ai besoin d'installer un package à l'aide d'APT ou de RPM, selon le système d'exploitation. J'ai vu la lib "apt" à mettre à jour ou à mettre à niveau le système, mais il est possible d'utiliser un seul paquet?

J'essayais d'utiliser trop "Subprocess": P>

subprocess.Popen('apt-get install -y filetoinstall', shell=True, stdin=None, stdout=None, stderr=None, executable="/bin/bash")


2 commentaires

Il semble que vous n'obtiens pas correctement la fourche. Avez-vous essayé de lire la documentation?


Pour Python 3.5+, voir Subprocess.Run ()


5 Réponses :


0
votes

Utilisez ceci pour rediriger la sortie sur / dev / null: xxx

L'appel à .Wait () bloquera jusqu'à ce que l'apt-get soit terminé.


2 commentaires

Ah ok merci mais comment puis-je arrêter le programme, attendre l'APT terminer l'installation, et quand est installé, acquis avec les autres fonctions?


Merci gars! J'utilise une partie de chaque solution. Mon code: PROP = SUBPROCESS.POPEN ('APT-GET INSTALLY FILE', Shell = TRUE, STDIN = Aucun, STDOUT = OUVERT (OS.DevNull, "WB"), STDOUT = STDOUT, EXECUTABLE = "/ BIN / BIN / Bash ") Proc.Wait () Ajouté: stdout et .wait merci une fois de plus



11
votes

Vous pouvez utiliser check_call code> dans la bibliothèque code> sous-processus code>.

from subprocess import STDOUT, check_call
import os
check_call(['apt-get', 'install', '-y', 'filetoinstall'],
     stdout=open(os.devnull,'wb'), stderr=STDOUT) 


2 commentaires

Merci gars! J'utilise une partie de chaque solution. Mon code: PROP = SUBPROCESS.POPEN ('APT-GET INSTALLY FILE', Shell = TRUE, STDIN = Aucun, STDOUT = OUVERT (OS.DevNull, "WB"), STDOUT = STDOUT, EXECUTABLE = "/ BIN / BIN / Bash ") Proc.Wait () Ajouté: stdout et .wait merci une fois de plus


Cela a fonctionné pour moi. Je voudrais suggérer d'utiliser un essai et à l'exception du bloc de sorte que, en cas d'erreur, cela vous indiquera ce que le problème est plutôt que de simplement dire qu'il y avait une erreur. J'ai ajouté une réponse ci-dessous comme complément.



3
votes

Pour cette tâche particulière, comme alternative à Subprocess Vous pouvez envisager d'utiliser Tissu , un outil de déploiement Python pour automatiser les constructions.


1 commentaires

Le lien que vous avez partagé donne ceci: autorisation refusée Vous n'avez pas les autorisations appropriées pour voir cette page. Veuillez contacter le propriétaire de ce projet pour demander la permission.



5
votes

Merci gars! J'utilise une partie de chaque solution. Mon code: xxx

ajouté: stdout et .wait

Merci une fois de plus d'Argentine!


0 commentaires

1
votes

Ceci est signifié comme une addition à la réponse acceptée de Russell Dias. Cela ajoute un essai et sauf le blocage de la sortie des informations d'erreur actionnées plutôt que de simplement indiquer qu'il y avait une erreur. xxx


0 commentaires