【问题标题】:python apt-get list upgradespython apt-get 列表升级
【发布时间】:2011-03-06 18:38:54
【问题描述】:

如何获取可用升级包的列表并使用 python 将其写入文件?

当我运行apt-get upgrade > output 它在 bash 中工作。我想我必须在python程序中发送陷阱信号(Ctrl+C)。

关于如何实现这一点的任何建议?


我现在在代码上尝试了这个:

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

【问题讨论】:

  • 也许你的其他 debian 系统正在使用旧版本的 python-apt
  • 是正确的,代码运行的地方使用 python-apt 0.7.94.2 并且给出错误的系统使用 python-apt 0.7.7.1+nmu1,我不能在不更改操作系统版本的情况下更新它们。 ..

标签: python apt-get


【解决方案1】:

使用 Python 模块 subprocess 并关闭 stdin 告诉子进程它应该退出。

【讨论】:

  • 而不是"> outputfile",您可以使用stdout=PIPE并通过communicate获取输出
【解决方案2】:

为什么不使用 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 评论中的链接

【讨论】:

  • 根据example,您在更新后缺少重新open() 缓存的步骤。
  • 太棒了,谢谢你,现在我已经制作了脚本,它在其他系统上喷出错误..
  • @krisdigitx,你必须确保所有这些系统上都安装了 python-apt
【解决方案3】:

使用 > 将输出重定向到文件是 shell 所做的事情。您的(更新的)代码将 > 传递给 apt-get ,它不知道如何处理它。将shell=True 添加到您对subprocess.Popen 的调用将首先通过shell 运行参数列表,这将使重定向工作。

【讨论】:

  • 添加 shell=True 是一种低效且混乱的重定向方式。使用 subprocess 模块自己的重定向要好得多 - 尽管在这种特定情况下,python-apt 模块更好。
猜你喜欢
  • 1970-01-01
  • 2011-09-22
  • 1970-01-01
  • 1970-01-01
  • 2016-08-02
  • 1970-01-01
  • 1970-01-01
  • 2017-11-27
  • 2017-10-27
相关资源
最近更新 更多