2014-10-08 101 views
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

回答

2

Python有相關的資料庫,幫助你用它:

例(應該在你的情況下工作,但我也沒辦法以測試它的工作):

import xml.etree.ElementTree as ET 
from urllib2 import urlopen 

url = 'http://nexus:8080/nexus/service/local/lucene/search?g=com.xxx.yyy&a=zzz' 
tree = ET.parse(urlopen(url)) 
print tree.findtext('.//latestRelease') 
+4

千倍這個。你也可以用'requests'跟着BeautifulSoup或者其他幾個組合來做到,但是任何一個都會比subprocess + curl + regex更好。 – 2014-10-08 01:03:40

+2

@JohnZwinck是的,謝謝,這有助於我通過提供'non-regex'解決方案來推進'regex'標籤:) – alecxe 2014-10-08 01:07:27