Python检查rpm是更高版本

2024-10-01 00:22:07 发布

您现在位置:Python中文网/ 问答频道 /正文

有谁能帮我检查一下Linux以满足rpm版本吗

下面是我用来获取包版本的命令。在

  rpm -qi libstdc++6 | awk -F': ' '/Version/ {print $2}'

使用子过程,我得到了下面的输出

^{pr2}$

现在我要比较6.2.1+r239768大于5.1.1

以下是我期望的结果

output = 6.2.1+r239768
print "This rpm version is supported" 
output = 6.3+r23
print "This rpm version is supported"
output = 7.1.1+r57678
print "This rpm version is supported"
output = 5.1.1+r23677
print "This rpm version is not supported"
output = 4.1+r56888
print "This rpm version is not supported"

Tags: 命令版本outputisversionlinuxnotthis
3条回答

$ rpmdev-vercmp 6.2.1+r239768 6.3+r23 6.2.1+r239768 < 6.3+r23

您可以读取退出代码: rpmdev-vercmp <EVR1> <EVR2>

如果EVR相等,则退出状态为0;如果EVR1较新,则为11;如果EVR2,则为12 是新的。其他退出状态表示问题。在

我觉得你应该更好地使用python API for rpm。在

因为我现在手头上没有基于RPM的系统,所以无法产生代码。在

下面的代码taken from Section 16.5,可以相应地进行调整

#!/usr/bin/python
# Reads in package header, compares to installed package.
# Usage:
# python vercompare.py libstdc++6.rpm
#
import os
import sys

import rpm
def readRpmHeader(ts, filename):
    """ Read an rpm header. """
    fd = os.open(filename, os.O_RDONLY)
    try:
        h = ts.hdrFromFdno(fd)
    finally:
        os.close(fd)
    return h

ts = rpm.TransactionSet()
h = readRpmHeader( ts, sys.argv[1] )
pkg_ds = h.dsOfHeader()
for inst_h in ts.dbMatch('name', h['name']):
    inst_ds = inst_h.dsOfHeader()
    if pkg_ds.EVR() >= inst_ds.EVR():
        print "Package file is same or newer, OK to upgrade."
    else:
        print "Package file is older than installed version."

您可以使用pkg_resources模块,因为它是setuptools的一部分:

In []:
from pkg_resources import parse_version
parse_version('6.2.1+r239768') > parse_version('5.1.1')

Out[]:
True

为了得到你的输出:

^{pr2}$

相关问题 更多 >