1. 程式人生 > >python 使用apt模組安裝軟體包

python 使用apt模組安裝軟體包

  最近開始學習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:
這裡寫圖片描述