2015-06-14 41 views
0

我試圖在Python 2.6.6中獲取系統(對於接口)的路由表到一個python列表中解析;但我似乎無法解決爲什麼整個結果存儲到一個變量。python格式化子進程的返回值

循環似乎一次迭代一個字符,而我想要的行爲是一次一行。

我得到的是一個字符;下面的簡短例子...

1 
0 
. 
2 
4 
3 

我想要線返回;所以我可以對每一行執行其他命令..

10.243.186.1 0.0.0.0   255.255.255.255 UH  0 0   0 eth0 
10.243.188.1 0.0.0.0   255.255.255.255 UH  0 0   0 eth0 
10.243.184.0 10.243.186.1 255.255.255.128 UG  0 0   0 eth0 

這裏是下面的代碼...

def getnet(int): 
    int = 'eth0' ####### for testing only 
    cmd = ('route -n | grep ' + int) 
    routes = subprocess.Popen([cmd], shell=True, stdout=subprocess.PIPE) 
    routes, err = routes.communicate() 
    for line in routes: 
     print line 

回答

0

routes你的情況是包含外殼整個輸出字節字符串命令。 for character in astring語句每次產生一個字符,就像您的問題中演示的例子。要獲得行作爲一個字符串列表來代替,叫lines = all_output.splitlines()

from subprocess import check_output 

lines = check_output("a | b", shell=True, universal_newlines=True).splitlines() 

這裏的a workaround if your Python version has no check_output()。如果您想在流程仍在運行時一次讀取一行,請參見Python: read streaming input from subprocess.communicate()

您可以嘗試使用os,​​模塊來獲取信息,而不是刷新外部命令的輸出。