2015-06-14 2 views
0

Я пытаюсь на Python 2.6.6 получить таблицу маршрутизации системы (для интерфейса) в список python для синтаксического анализа; но я не могу решить, почему весь результат хранится в одной переменной.python formatting возвращаемое значение подпроцесса

Петля, кажется, повторяется по одному символу за раз, а поведение, которое я хотел, было по одной строке за раз.

то, что я получаю, является одним символом; короткий пример ниже ...

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, ctypes, чтобы получить информацию вместо grepping вывода внешней команды.

Смежные вопросы