python 使用apt模組安裝軟體包
阿新 • • 發佈:2019-02-19
最近開始學習python,看到python在系統管理,尤其是自動化管理方面很有用武之地並且已經成績斐然(例如Ansible)。結合最新的實際情況,學些python如何管理linux上的軟體包,具體到ubuntu上就是python的apt模組。
直接上程式碼,然後再簡單解釋。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
#created by yqbjtu on 2018/01/27
'''
fyi
https://apt.alioth.debian.org/python-apt-doc/library/index.html
https://apt.alioth.debian.org/python-apt-doc/library/apt_pkg.html
'''
import string
import sys
import apt
import apt_pkg
#this program will show how to install or query by python apt module
def checkPackage(pkgname):
cache = apt.Cache()
my_apt_pkg = cache[pkgname] #apt.package.Package object
ll_pkg = cache._cache[pkgname] # the low-level package object, apt_pkg.Package object
#
if ll_pkg.current_state != apt_pkg.CURSTATE_NOT_INSTALLED:
#https://apt.alioth.debian.org/python-apt-doc/library/apt_pkg.html#curstates
print "pkgName:" + ll_pkg.get_fullname() + ", version: " + ll_pkg.current_ver.ver_str + ",DescLang:"+ ll_pkg.current_ver.translated_description.language_code + ",State:%d" % (ll_pkg.current_state)
print "this package info in Cache:"
print ll_pkg.version_list
else:
print "pkg:" + pkgname + " is not installed."
if my_apt_pkg.is_installed:
print "{pkg_name} already is installed".format(pkg_name=pkgname)
else:
my_apt_pkg.mark_install()
try:
cache.commit()
except Exception, arg:
print >> sys.stderr, "Sorry, package installation failed [{err}]".format(err=str(arg))
print "End."
#end of checkPackage function
if len(sys.argv)==2:
pkgname = sys.argv[1]
checkPackage(pkgname)
else:
print "Usage:%s softwareName" % (sys.argv[0])
第一步,就是這一段程式碼的基本使用python aptDeme.py xxxx , 注意,這裡的xxxx就是你要安扎un個或者查詢的軟體包,例如wget、nginx等等
第二步,就是通過apt.Cache()獲取現在的整個安裝包的情況,我們可以在cache中查詢軟體包是否已經安裝,或者是否在cache,如果不在cache中需要新增或者修改repo,然後apt update,再次執行本程式。
第三步,就是根據查詢的軟體包實際情況,install或者列印軟體的資訊。
特別注意的是這兩句,cache中可能包該軟體的多個版本
print “this package info in Cache:”
print ll_pkg.version_list
當wget沒有安裝時,執行該程式
截圖1:
當wget安裝後,執行該程式。
截圖2: