我在运行 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 的命令而不是 awk
和 sort
。我认为我们可以对 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/