我是Java / C编程,努力学习Python。 (我在Linux机器上用Python 2.4.3编写。)我有一个简单的程序,它可以telnet到Cisco路由器,登录,然后捕获配置。路由器的配置存储在名为" output":
的变量中#!/usr/bin/python
import telnetlib
import datetime
import sys
def telnetFunction( host ):
print("Telnetting to device "+host+"...\n")
tn = telnetlib.Telnet(host)
# ...use tn.read_until() and tn.write() to log into the router... ...this works...
tn.write("terminal length 0"+"\n")
tn.write("show run"+"\n")
tn.write("exit"+"\n")
output=tn.read_all() # router config stored as "output"
return output
host = "192.168.102.133"
output=telnetFunction( host )
以上代码有效。通过使用一堆不同的print()语句,我可以看到路由器的配置全部在"输出",我假设是一个换行的字符串数组.... ?对此并不完全确定; telnetlib文档没有指定。
我现在的问题是我需要我的程序再次逐步输出,一次提取一个字符串。我需要这样的东西:
while(iterating through output)
tmpString = output.getNextStr()
所以如果输出看起来像这样:
Current configuration : 34211 bytes\n!\nversion 12.3\nno service pad\n...etc...
我需要tmpString在上面循环的每次迭代中等于跟随:
tmpString = "Current configuration : 34211 bytes"
tmpString = "!"
tmpString = "version 12.3"
tmpString = "no service pad"
我一直在谷歌搜索几个小时,但我很难过。 (部分问题是我不清楚"输出"确实是一个数组。它可能是一个字符串吗?)我玩过split()并使用[]&# 39;但到目前为止没有运气。有没有人知道我哪里出错了?谢谢,-ROA
答案 0 :(得分:2)
正如您在示例中所述,假设输出定义为
output = 'Current configuration : 34211 bytes\n!\nversion 12.3\nno service pad'
下一步是将字符串拆分为\ n以便
output_list = output.split('\n')
这将生成以下列表
output_list = ['Current configuration : 34211 bytes', '!', 'version 12.3', 'no service pad']
然后你可以迭代这个列表。
将它们捆绑在一起
#!/usr/bin/python
import telnetlib
import datetime
import sys
def telnetFunction( host ):
print("Telnetting to device "+host+"...\n")
tn = telnetlib.Telnet(host)
# ...use tn.read_until() and tn.write() to log into the router... ...this works...
tn.write("terminal length 0"+"\n")
tn.write("show run"+"\n")
tn.write("exit"+"\n")
output=tn.read_all() # router config stored as "output"
return output
host = "192.168.102.133"
output=telnetFunction( host )
output_list = output.split('\n')
for item in output_list:
print item
答案 1 :(得分:1)
我假设您的变量tn被视为文件句柄。因此,当您读取此“文件”一次时,指针位于文件的末尾,需要重置:
tn.seek(0)
在执行第二个循环之前调用它。
或者,您可以像这样迭代输出:
for line in output.split("\n"):
print line