python 查找软件唯一版本的方法

标签 python linux sorting split

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

~$ 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

我正在尝试将我的安装/升级脚本从 shell 转换为 python。为此,我需要获取版本号,但只需要一次。在我的 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

我想在此使用基于 python 的命令而不是 awksort。我认为我们可以对 awk 使用 split(),但无法找到正确的方法。 我们可以使用 python sort 来获取唯一值,例如 shell 中的 sort -u

最佳答案

您可以定义要在 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']

关于python 查找软件唯一版本的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48545491/

相关文章:

python - 将单个字典值从字符串转换为整数?

python - 从 ruby​​ 调用 python 脚本

linux - 如何在linux shell中用新值替换 '-u username -p password'?

linux - phpstorm 在./idea 目录下写入问题

c# - 通过 bool 函数排序列表的更短方法

javascript - 为什么数字数组,更多数据排序比对象数组更快,Javascript中的数据更少?

python - 训练时的位精度如何影响 DNN 的准确性 - 支持量化类型推理的库

Python 3 不通过 stat 检测符号链接(symbolic link)

linux - 从 Linux 终端的标准输出中删除 "bad address"错误

java - groupingBy 之后对列表进行排序