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'
Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top