python mises à jour de la liste apt-get
Question
Comment puis-je obtenir une liste des paquets de mise à niveau disponibles et écrire dans le fichier en utilisant python?
Quand je lance apt-get upgrade > output
il travaille en bash. Je pense que je dois envoyer le signal de piège ( Ctrl + C ) dans le programme python.
Toutes les suggestions sur la façon d'y parvenir?
J'ai essayé sur le code maintenant:
#!/usr/bin/env python
import subprocess
apt = subprocess.Popen([r"apt-get", "-V", "upgrade", ">", "/usr/src/python/upgrade.log"], stdin=subprocess.PIPE)
apt_stdin = apt.communicate()[0]
mais il sort et ne pas écrire dans le fichier.
Cela fonctionne mais je reçois erreur lorsque je le port cela aux autres systèmes Debian:
import apt
cache=apt.Cache()
cache.update()
cache.open(None)
cache.upgrade()
for pkg in cache.get_changes():
# print pkg.name, pkg.summary
fileHandle = open('/tmp/upgrade.log', 'a')
fileHandle.write(pkg.name + " - " + pkg.summary + "\n")
et l'erreur ....
/usr/lib/python2.5/site-packages/apt/__init__.py:18: FutureWarning: apt API not stable yet
warnings.warn("apt API not stable yet", FutureWarning)
Traceback (most recent call last):
File "apt-notify.py", line 13, in <module>
for pkg in cache.get_changes():
AttributeError: 'Cache' object has no attribute 'get_changes'
La solution
Pourquoi ne pas utiliser le module python-apt par exemple.
import apt
cache=apt.Cache()
cache.update()
cache.open(None)
cache.upgrade()
for pkg in cache.getChanges():
print pkg.sourcePackageName, pkg.isUpgradeable
lire aussi le lien dans le commentaire de BADP
Autres conseils
Utilisez le module Python subprocess
et proche stdin
de dire le processus de l'enfant qu'il doit quitter.
Utilisation> pour rediriger la sortie vers un fichier est quelque chose que le shell fait. Votre code (mise à jour) passe> pour apt-get au lieu, qui n'a aucune idée de quoi faire. Ajout shell=True
à votre invocation de subprocess.Popen
exécutera la liste des arguments à travers la coquille d'abord, qui fera le travail redirect.