我在运行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
等唯一值。
答案 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。集合的关键函数只是add,remove(如果您不确定元素是否在集合中,则为discard),并update合并一个集合进入另一个。或者,如果您有一个非唯一项目列表并希望它们是唯一的,请构建一个新集合:foo = set(my_non_unique_list)
请注意,集合是无序的。既然你在谈论排序,我不认为排序是你关注的问题,所以套装应该就是你所需要的。