Обновления списка Python apt-get - PullRequest
1 голос
/ 22 июня 2010

Как я могу получить список доступных пакетов обновления и записать его в файл, используя python?

Когда я запускаю apt-get upgrade > output, он работает в bash.Я думаю, что я должен отправить сигнал прерывания ( Ctrl + C ) в программе Python.

Любые предложения о том, как этого добиться?


Я попробовал это в коде сейчас:

#!/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]

, но он завершается и не записывает в файл.


Это работает, но я получаю ошибку, когда яперенесите это на другие системы 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")

и ошибка ....

/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'

Ответы [ 3 ]

3 голосов
/ 22 июня 2010

Почему бы не использовать модуль python-apt, например.

import apt
cache=apt.Cache()
cache.update()
cache.open(None)
cache.upgrade()
for pkg in cache.getChanges():
    print pkg.sourcePackageName, pkg.isUpgradeable

также прочитайте ссылку в комментарии badp

2 голосов
/ 22 июня 2010

Используйте модуль Python subprocess и закройте stdin, чтобы сообщить дочернему процессу, что он должен завершиться.

0 голосов
/ 23 июня 2010

Использование> для перенаправления вывода в файл - это то, что делает оболочка. Ваш (обновленный) код вместо этого передает> apt-get, который не знает, что с ним делать. Добавление shell=True к вашему вызову subprocess.Popen сначала запустит список аргументов через оболочку, что сделает работу перенаправления.

...