【发布时间】:2017-05-24 15:17:40
【问题描述】:
Python 3.6.0
我有一个程序可以解析 Cisco 交换机和路由器的输出。
我在程序中到达了一个点,我从“sh ip int brief”返回输出 命令。
我将它放在一个列表中,这样我就可以拆分“>”字符并提取主机名。
完美运行。相关代码sn-p:
ssh_channel.send("show ip int brief | exc down" + "\n")
# ssh_channel.send("show ip int brief" + "\n")
time.sleep(0.6)
outp = ssh_channel.recv(5000)
mystring = outp.decode("utf-8")
ipbrieflist = mystring.splitlines()
hostnamelist = ipbrieflist[1].split('>')
hostname = hostnamelist[0]
如果路由器处于“启用”模式,则命令提示符在主机名后有一个“#”字符。
如果我将程序更改为在“#”字符上拆分:
hostnamelist = ipbrieflist[1].split('#')
它仍然可以完美运行。
如果输出在“ipbrieflist”中有“>”字符或“#”字符,我需要程序来处理。
我找到了几个有关如何处理此问题的有效参考资料。例如:
import re
text = 'The quick brown\nfox jumps*over the lazy dog.'
print(re.split('; |, |\*|\n',text))
以上代码完美运行。
但是,当我如下修改我的代码时:
hostnamelist = ipbrieflist[1].split('> |#')
它不起作用。 “不起作用”是指它不会在任何一个字符上分裂。完全没有分裂。
以下调试来自 PyCharm:
ipbrieflist = mystring.splitlines() ipbrieflist={list}: ['终端长度 0', 'rtr-1841>show ip int brief | exc down', 'Interface'] IP-Address OK?方法状态协议','FastEthernet0/1 192.168.1.204 YES NVRAM up up','Loopback0 172.17.0.1 YES NVRAM up up','','rtr-1841>'] hostnamelist = ipbrieflist[1].split('> |#') hostnamelist={list}: ['rtr-1841>show ip int brief |除外'] 主机名 = {str}'rtr-1841>show ip int brief |排除'
如您所见,主机名变量仍然包含“show ip int brief | exc down' 附加到它。
如果主机名后跟“#”字符,我会得到完全相同的行为。
我做错了什么?
谢谢。
【问题讨论】:
-
呃,
re.split!=str.split。
标签: python-3.x split