用python方法找到独特的软件版本

时间:2018-01-31 15:16:27

标签: python linux sorting split

我在运行python 3.3的Linux(RHEL 6.2)服务器上安装了多个软件组件(让我们称之为XYZ)。

public void makeValid(){
    for (int i = 0; i < lengthOfMessage ; i++ ) {
        char mchar = message.charAt(i);
        if (64 <= mchar && mchar<= 90) {
            mchar = (char)((mchar + 32));
            builder.append(mChar);
        }
    }
}

我试图将我的安装/升级脚本从shell转换为python。为此我需要获取版本号,但只需要一次。在我的python脚本中,我添加了以下代码

~$ rpm -qa | grep -i xyz
XYZman-5.3.1.9-1.x86_64
XYZconnect-5.3.1.9-1.x86_64
XYZconsole-5.3.1.9-1.x86_64
XYZnode-5.3.1.9-1.x86_64

我想在此使用基于python的命令而不是>>> cmd = ("rpm -qa | grep -i xyz | awk -F[-] '{print $2}' | sort -u") >>> sp = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) >>> (out, err) = sp.communicate() >>> rcode = sp.returncode >>> print (out.decode('utf-8').replace('\n', '') >>> 5.3.1.9 awk。我认为我们可以sort使用split(),但无法找到正确的方法。 我们可以使用python awk来获取shell中的sort等唯一值。

2 个答案:

答案 0 :(得分:1)

您可以定义要在split()方法中使用的分隔符,如下所示:

>>> cmd = ("rpm -qa | grep -i xyz")
>>> sp = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
>>> (out, err) = sp.communicate()
>>> v = []
>>> for line in out.splitlines():
...     if line.split("-")[1] not in v:
...         v.append(line.split("-")[1])
...
>>> print v
['5.3.1.9']

答案 1 :(得分:1)

对我来说,感觉像是在试图将蟒蛇变成一个它并不真正属于的过程。你展示的5行中有4行是为了让bash与python交谈。我强烈建议你在bash端做bash,然后将你需要的任何东西作为参数传递给python。

考虑到所有这些,如果你仍然在寻找&#34;我如何获得只有唯一元素的迭代?&#34;答案是sets。集合的关键函数只是addremove(如果您不确定元素是否在集合中,则为discard),并update合并一个集合进入另一个。或者,如果您有一个非唯一项目列表并希望它们是唯一的,请构建一个新集合:foo = set(my_non_unique_list)

请注意,集合是无序的。既然你在谈论排序,我不认为排序是你关注的问题,所以套装应该就是你所需要的。