0
我想實現一個python等效以下的bash命令:剝離字符串Python化的方式
VERSION=$(curl --silent "http://nexus:8080/nexus/service/local/lucene/search?g=com.xxx.yyy&a=zzz" | sed -n 's|<latestRelease>\(.*\)</latestRelease>|\1|p' | sed -e 's/^[ \t]*//' | tail -1)
我想出的代碼下面的代碼片段,其也部分地工作,並得到<latestRelease>1.0.11</latestRelease>
輸出的一堆,這是完全可以預料的。但是,我被卡住了,只想得到1.0.11版本作爲python腳本的輸出。再次1.0.11
可能根據在Nexus的最新版本不同,所以將是很好,如果專家能提出一個動態的解決方案在一個Python化的方式來剔除在bash的sed和尾部做了部分
#!/usr/bin/env python
import os;
import subprocess;
import re
import string;
proc = subprocess.Popen(["curl", "--silent", "http://nexus:8080/nexus/service/local/lucene/search?g=com.xxx.yyy&a=zzz"], stdout=subprocess.PIPE)
out = proc.communicate()[0]
search_string = "<latestRelease>"
for line in out.splitlines():
if search_string in line:
re.sub(r'\s*latestRelease\s*', '', line)
print line
OUTPUT:
<latestRelease>1.0.11</latestRelease>
<latestRelease>1.0.11</latestRelease>
<latestRelease>1.0.11</latestRelease>
<latestRelease>1.0.11</latestRelease>
<latestRelease>1.0.11</latestRelease>
<latestRelease>1.0.11</latestRelease>
<latestRelease>1.0.11</latestRelease>
<latestRelease>1.0.11</latestRelease>
<latestRelease>1.0.11</latestRelease>
<latestRelease>1.0.11</latestRelease>
<latestRelease>1.0.11</latestRelease>
<latestRelease>1.0.11</latestRelease>
<latestRelease>1.0.11</latestRelease>
<latestRelease>1.0.11</latestRelease>
<latestRelease>1.0.11</latestRelease>
<latestRelease>1.0.11</latestRelease>
<latestRelease>1.0.11</latestRelease>
<latestRelease>1.0.11</latestRelease>
<latestRelease>1.0.11</latestRelease>
<latestRelease>1.0.11</latestRelease>
<latestRelease>1.0.11</latestRelease>
所需的輸出:1.0.11
千倍這個。你也可以用'requests'跟着BeautifulSoup或者其他幾個組合來做到,但是任何一個都會比subprocess + curl + regex更好。 – 2014-10-08 01:03:40
@JohnZwinck是的,謝謝,這有助於我通過提供'non-regex'解決方案來推進'regex'標籤:) – alecxe 2014-10-08 01:07:27