我正在尝试编写一个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”字符串?
答案 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])
答案 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']
>>>