是否有一种优雅且更像Python的方法来检查Debian上是否安装了软件包?
在bash脚本中,我会这样做:
dpkg -s packagename | grep Status
建议在Python脚本中执行相同的操作吗?
谢谢,
答案 0 :(得分:16)
这是一种pythonic方式:
import apt
cache = apt.Cache()
if cache['package-name'].is_installed:
print "YES it's installed"
else:
print "NO it's NOT installed"
答案 1 :(得分:3)
如果要检查是否存在安装Python模块的软件包,可以在依赖的Python脚本中对此进行测试 - 尝试导入它并查看是否出现异常:
import sys
try:
import maybe
except ImportError:
print "Sorry, must install the maybe package to run this program."
sys.exit(1)
答案 2 :(得分:2)
一个稍微好一点,希望是你的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."
答案 3 :(得分:2)
这是一些代码,可以让您以一种简洁的方式显示是否已安装软件包(不会在屏幕上触发混乱的错误消息)。但这仅适用于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)
答案 4 :(得分:1)
看看commands
。它对于在命令行上运行并获取状态非常有用。
否则,我确信有一些库可以让你与apt交互。 python-apt可能会有效,但它有点原始。只是捕获命令行似乎更容易。
答案 5 :(得分:0)
我需要一个跨平台兼容的解决方案,因此我最终使用which。
import subprocess
retval = subprocess.call(["which", "packagename"])
if retval != 0:
print("Packagename not installed!")
虽然它不像上述答案那样具有pythonic,但它确实可以在大多数平台上运行。
答案 6 :(得分:0)
受先前答案的启发,这对Python 2和Python 3都很好,并且避免了尝试/捕获关键错误的情况:
=ARRAYFORMULA(IF(IFERROR(IF(IFERROR(REGEXEXTRACT(A1:A, "\d+")), , "♦"))<>"", 1))
答案 7 :(得分:0)
我也有同样的疑问。搜索了互联网的每个角落,但没有找到。 但最后经过一些实验我做到了!!。
import os
packagename = "figlet" # Type in your package name
os.system("dpkg -s "+packagename" | grep Status")
使用 python 代码输入任何终端:
import os
os.system("YOUR TERMINAL COMMAND HERE")