使用 yum 命令获取升级的大小

Get the size of an upgrade with yum command

我想用 yum 升级 linux 的尺寸。

对于 apt 我是这样做的:

`def get_upgradable() : #récupère la list des paquets
            command = "apt list --upgradable 2>/dev/null"
            process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, encoding='utf8')
            packages_name = []
            for out in process.stdout :
                if "/" in out :
                    packages_name.append(out[:out.index('/')])
            return packages_name

        def get_size(*args, return_somme=True) : #fait la somme du poids de chaque paquets
            command = "apt-cache --no-all-versions show {pkg} | grep \"^Size\" | cut -d' ' -f2"
            sizes = []
            somme = 0
            for pkg in args :
                size = int(
                    subprocess.Popen(command.format(pkg=pkg), shell=True, stdout=subprocess.PIPE, encoding='utf8'
                    ).stdout.read())
                sizes.append(size)
                somme += size
            if return_somme : return somme
            return sizes

        somme=get_size(*get_upgradable())`

我尝试了这个,但我不知道如何只获得尺寸:

yum check-update | awk '/\S+\s+[0-9]\S+\s+\S+/ {print  }' > updates
# yes N | yum update | awk '{if(=="k"||=="M") print ,,}' > checksize.txt

我确实看过yum check-update命令的打印结果,但似乎没有包括下载(升级)大小。所以基本上;

  • 运行 yum update 而是输出下载大小信息。
  • 然后预先发送密钥N到下载确认提示,以避免任何下载。
  • if语句是为了避免打印不包含尺寸信息的行。
  • 要仅打印包名称以外的尺寸,只需从打印命令中删除 ,

OUTPUTheadtail):

# cat -n checksize.txt | (head; tail)
     1  centos-linux-release 22 k
     2  kernel 5.9 M
     3  kernel-core 36 M
     4  kernel-modules 28 M
     5  PackageKit 599 k
     6  PackageKit-command-not-found 27 k
     7  PackageKit-glib 140 k
     8  PackageKit-gstreamer-plugin 17 k
     9  PackageKit-gtk3-module 18 k
    10  abattis-cantarell-fonts 156 k
   886  subscription-manager-rhsm-certificates 260 k
   887  cups-ipptool 5.8 M
   888  oddjob-mkhomedir 49 k
   889  openssh-askpass 92 k
   890  python3-html5lib 214 k
   891  python3-pexpect 138 k
   892  python3-tracer 123 k
   893  elfutils-debuginfod-client 65 k
   894  kpatch-dnf 17 k
   895  memstrack 48 k

如果您只想要总下载大小:

# yes N | yum update | awk -F": " '/^Total download size/{print }'
1.0 G

因此,我们与一位朋友一起致力于此并升级解决方案。提醒:我在服务器上发送 python 脚本以获取升级大小。

def get_upgradable() :
        if os.path.isfile("/usr/bin/apt"):
            command = "apt list --upgradable 2>/dev/null | cut -d'/' -f1"
        elif os.path.isfile("/usr/bin/yum"):
            #command = "yum check-update 2>/dev/null | grep \".x86_64\" | cut -d' ' -f1"
            command="yum check-update | awk '/\S+\s+[0-9]\S+\s+\S+/ {print  }'"
        else :
            raise PkgManager("Not found package manager")
            return None
        process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, encoding='utf8')
        packages_name = []
        for out in process.stdout :
            packages_name.append(out[:-1])
        return packages_name

def get_yum_size(*args, return_somme=True) :
    command = "yum info {pkg} | egrep \"(Taille|Size)\""
    factor = {"k" : 1000,
              "M" : 1000000,
              "G" : 1000000000}
    somme = 0
    sizes = []
    for pkg in args :
        lines = subprocess.Popen(command.format(pkg=pkg),
                                 shell=True,
                                 stdout=subprocess.PIPE,
                                 encoding='utf8',
                                ).stdout.readlines()
        infos = lines[-1][:-1].split(' ')
        size = float(infos[-2])*factor[infos[-1]]
        sizes.append(size)
        somme += size
    if return_somme : return somme
    return sizes

你用 :

来调用它
def get_size(*args, **kwargs) :
    if os.path.isfile("/usr/bin/apt"):
        return get_apt_size(*args, **kwargs)
    elif os.path.isfile("/usr/bin/yum"):
        return get_yum_size(*args, **kwargs)
    else :
        raise PkgManager("Not found package manager")

主要是:

get_size(*get_upgradable())