2017-06-21 91 views
0

我创建了一个类来解析命令的输出并返回所需的字符串。我使用了正则表达式来获取所需的字符串。目前形式的班级服务于此目的。但是,我想通过解析整个命令输出并将其存储在字典中来提高效率。将命令的输出保存在Python字典中

本质上,我想根据“:”分割输出,并以键值对的形式存储整个输出。

输出看起来象下面这样:

Interface: gig1 
Profile: 
Session status: ACTIVE 
Peer: x.x.x.x port 7500 
    Session ID: 5 
    v2 SA: local x.x.x.x/4500 remote x.x.x.x/4500 Active 
    FLOW: permit 47 host 2.2.2.2 host 1.1.1.1 

从test.ssh进口嘘 进口重新

class crypto: 
    def __init__(self, username, ip, password ,router): 
     self.user_name = username 
     self.ip_address = ip 
     self.pass_word = password 
     self.machine_type = router 

    def session_status(self, interface): 
     command = 'show session '+interface 
     router_ssh = Ssh(self.ip_address) 
     result = router_ssh.cmd(command) 
     search_obj = re.search("Session status:\s+(.*)", result, flags=0) 
     return search_obj.group(1) 

测试脚本

from test.networks.router_parser import * 

routerobj = crypto('user', 'ip', 'password', 'cisco') 
status = routerobj.session_status('interface_name') 
print (status) 
+0

如果你想以':'字典的形式存储'result',我们可能需要另一个splitter来键值对吗? –

+0

@be_good_do_good是的,我想根据下面的内容在表单字典中存储命令输出的结果: – mike

回答

0
resultDict = dict(line.split(':', 1) 
    for line in result.split('\n') if ':' in line) 

为了摆脱尾随的和领先空间:

resultDict = dict(map(str.strip, line.split(':', 1)) 
    for line in result.split('\n') if ':' in line) 
+0

您能告诉我如何从测试脚本访问字典。例如,我想在测试脚本中打印会话状态,我该怎么做?另外,session_status()应该返回什么? – mike

+0

'print resultDict ['Session status']''和'return resultDict ['Session status']'。 – Alfe

+0

谢谢,我想以字典的形式返回整个输出并访问测试脚本中的键值对。所以我可以返回整个字典,返回resultDict []。它是否正确 ? – mike