使用Python从Telnet输出中提取特定字符串

时间:2015-09-03 09:57:56

标签: python telnet

我正在尝试编写一个Python脚本来telnet到一堆Cisco路由器,提取运行配置并保存它。每个路由器都有不同的名称,所以我想要的是提取设备名称并使用该名称保存输出文件。例如,这是一个Cisco路由器输出的片段,其中有一行“hostname ESW1”

Current configuration : 1543 bytes

!
version 12.4
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname ESW1
!
boot-start-marker
boot-end-marker
!

我正在使用telnetlib,我可以获取输出并将其保存在变量中。我的问题是如何识别该特定行并在“主机名”之后提取“ESW1”字符串?

3 个答案:

答案 0 :(得分:1)

使用正则表达式:

config_string = '''Current configuration : 1543 bytes

!
version 12.4
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname ESW1
!
boot-start-marker
boot-end-marker
!'''

import re
hostname = re.findall(r'hostname\s+(\S*)', config_string)[0]
print hostname
# ESW1

或者,如果您不喜欢正则表达式:

for line in config_string.splitlines():
    if line.startswith('hostname'):
    hostname = line.split()[1]
print hostname
# ESW1

我认为正则表达式会比循环运行得更快。

答案 1 :(得分:0)

一种简单的方法是使用正则表达式并在变量中搜索主机名。要匹配主机名,您可以使用此正则表达式模式:

import org.openqa.selenium.WebDriver; import org.testng.annotations.AfterSuite; import org.testng.annotations.Test; public class Testpdf { public WebDriver driver; private ArrayList1 arraylist2 = new ArrayList1(); List<String> listTestClassIndexes = new ArrayList<String>(); PdfUtility pdfUtility = new PdfUtility(); @Test public void testclass() { listTestClassIndexes.add(arraylist2.getList(0)); } @AfterSuite public void tearDown() throws Exception { // add time stamp to the resultList listTestClassIndexes.add(arraylist2.getList(2)); // write the test result pdf file with file name TestResult pdfUtility.WriteTestResultToPdfFile("TestResult.pdf", listTestClassIndexes); driver.quit(); } }

python中的代码如下所示:

hostname (?P<hostname>\w+)

结果是:import re p = re.compile(ur'hostname (?P<hostname>\w+)') test_str = u"Current configuration : 1543 bytes\n\n!\nversion 12.4\nservice timestamps debug datetime msec\nservice timestamps log datetime msec\nno service password-encryption\n!\nhostname ESW1\n!\nboot-start-marker\nboot-end-marker\n!" hostnames = re.findall(p, test_str) print(hostnames[0])

regex101

上试用

答案 2 :(得分:0)

>>> import re
>>> telnetString = """Current configuration : 1543 bytes
... 
... !
... version 12.4
... service timestamps debug datetime msec
... service timestamps log datetime msec
... no service password-encryption
... !
... hostname ESW1
... !
... boot-start-marker
... boot-end-marker
... !"""
... 
>>> re.findall(r'hostname (.*?)\n',telnetString)
['ESW1']
>>>