Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python apt获取列表升级_Python_Apt Get - Fatal编程技术网

python apt获取列表升级

python apt获取列表升级,python,apt-get,Python,Apt Get,如何获得可用的升级包列表并使用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

如何获得可用的升级包列表并使用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'

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

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

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

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

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

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

根据,您错过了更新后重新缓存的步骤。很好,谢谢,现在我已经编写了脚本,它在其他系统上的溢出错误。@Kristigitx,您必须确保所有这些系统上都安装了python apt。根据,您错过了更新后重新缓存的步骤。很酷,这很好,谢谢,现在我已经编写了脚本,它在其他系统上的溢出错误。@Kristigitx,您必须确保所有这些系统上都安装了python apt,而不是>outputfile,您可以使用stdout=PIPE并通过communicate获取输出,而不是>outputfile,您可以使用stdout=PIPE并通过communicate获取输出也许您的其他debian系统使用的是较旧版本的python APTies正确,如果代码运行时使用python apt 0.7.94.2,而出现错误的系统使用python apt 0.7.7.1+nmu1,我不能在不更改操作系统版本的情况下更新它们……也许您的其他debian系统使用的是较旧版本的python aptyes correct,如果代码运行时使用python apt 0.7.94.2,而给出错误的系统使用python apt 0.7.7.1+nmu1,我不能在不更改操作系统版本的情况下更新它们……添加shell=True是一种低效且混乱的重定向方法。使用子流程模块自己的重定向要好得多——尽管在这种特定情况下,python apt模块更好。添加shell=True是一种低效且混乱的重定向方法。使用子流程模块自己的重定向要好得多——尽管在本例中,python apt模块更好。