是否有一种优雅且更像Python的方式来检查软件包是否安装在Debian上?检查是否安装了软件包
在bash脚本,我会做:
dpkg -s packagename | grep Status
建议做一个Python脚本一样吗?
感谢,
是否有一种优雅且更像Python的方式来检查软件包是否安装在Debian上?检查是否安装了软件包
在bash脚本,我会做:
dpkg -s packagename | grep Status
建议做一个Python脚本一样吗?
感谢,
看一看commands
。这对于在命令行上运行并获取状态非常有用。
否则,我确定有一些库可以让你与apt进行交互。 python-apt可能工作,但它有点生。只是捕获命令行似乎更容易。
如果你检查它安装一个Python模块,你可以从相关的Python脚本中测试了这个包的存在 - 尝试导入它,看看你得到一个异常:
import sys
try:
import maybe
except ImportError:
print "Sorry, must install the maybe package to run this program."
sys.exit(1)
稍微更好,你的bash例如希望惯用版本:
import os, subprocess
devnull = open(os.devnull,"w")
retval = subprocess.call(["dpkg","-s","coreutils"],stdout=devnull,stderr=subprocess.STDOUT)
devnull.close()
if retval != 0:
print "Package coreutils not installed."
这是一个Python的方式:
import apt
cache = apt.Cache()
if cache['package-name'].is_installed:
print "YES it's installed"
else:
print "NO it's NOT installed"
好答案 – jsj 2014-07-09 23:46:35
在没有安装软件包的情况下,您会得到一个关键错误。还有另外一种方法可以解决这个问题,如果找不到软件包,可以提供更整洁的输出。我将把它作为OP的评论发布。 – 2017-08-14 14:38:48
我需要一个跨平台兼容的解决方案,所以我最终使用which。
import subprocess
retval = subprocess.call(["which", "packagename"])
if retval != 0:
print("Packagename not installed!")
虽然它不像上述答案那样pythonic它在大多数平台上都能正常工作。
这是一些代码,如果软件包已安装或没有安装(在屏幕上触发乱糟糟的错误消息),它将为您提供一种简洁的显示方式。不过,这仅适用于Python 3。
import apt
cache = apt.Cache()
cache.open()
response = "Package Installed."
try:
cache['notapkg'].is_installed
except KeyError:
response = "Package Not Installed."
print(response)
这些不是OP正在寻找的软件包。 Python软件包和Debian软件包管理器的软件包(很大程度上)是不同的。见:http://en.wikipedia.org/wiki/Dpkg – Oli 2010-08-02 17:03:06
那么,OP确实询问是否有从Python脚本内部的方式,所以我不认为这是一个飞跃,认为他正在寻找用于检测Python模块依赖关系的方法。尽管如此,我希望我的答案更合适。 – PaulMcG 2010-08-02 17:16:06
谷歌送我到这里寻找这个答案,所以很感激。 – noah 2014-02-07 22:57:36