python格式化子进程的返回值

时间:2015-06-14 04:30:05

标签: subprocess python-2.6

我正在尝试使用Python 2.6.6将系统(用于接口)的路由表放入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

1 个答案:

答案 0 :(得分:0)

在您的情况下,

routes是一个bytestring,包含shell命令的整个输出。 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()

您可以尝试使用osctypes模块来获取信息,而不是使用外部命令的输出。