2013-07-26 54 views
2

好的。我有兩個shell命令返回字符串結果,然後我需要進一步處理。第一個命令生成一個結果(主機名),然後下一個命令獲得第一個命令的結果,以擴展另一個更廣泛的主機名列表。這是爲了生成運行另一個shell命令的主機列表。使用子進程迭代多個嵌套結果

我不需要一個完整的例子,只需要在正確的方向上進行一些操作。

import subprocess 

def getMasterList(): 
    p1 = subprocess.Popen(['get_master_list'], stdout=subprocess.PIPE) 
    p2 = subprocess.Popen(['grep', '-v', '\['], stdin=p1.stdout, stdout=subprocess.PIPE) 
    master_list = p2.communicate()[0] 
    return master_list.split() 

def getHostsFromList(master): 
    p1 = subprocess.Popen(['get_hosts_from_master', master], stdout=subprocess.PIPE) 
    p2 = subprocess.Popen(['grep', '-v', '\['], stdin=p1.stdout, stdout=subprocess.PIPE) 
    print p2.communicate()[0] 

def doStuff(host): 
    p = subprocess.Popen('run_shell_command', shell=True, stdout=subprocess.PIPE) 
    print p.stdout.read() 

for master in getMasterList(): 
    getHostsFromList(master) 
    # How do I iterate further to run doStuff() over the hosts from getHostsFromList(master)? 
+0

可以更換getHostsFromList的'最後一行()'返回'p2.communicate()[0] .split()'並使用for循環,就像你之前做的一樣? – bbayles

回答

0

也許我失去了一些東西,但不是它只是:

def getHostsFromList(master): 
    p1 = subprocess.Popen(['get_hosts_from_master', master], stdout=subprocess.PIPE) 
    p2 = subprocess.Popen(['grep', '-v', '\['], stdin=p1.stdout, stdout=subprocess.PIPE) 
    return p2.communicate()[0] 

for master in getMasterList(): 
    for host in getHostsFromList(master): 
     doStuff(host)