我正在尝试使用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
答案 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()。
您可以尝试使用os
,ctypes
模块来获取信息,而不是使用外部命令的输出。