Member 14038037 Ответов: 0

Как хранить табличные данные, полученные из интерфейса командной строки в Python с использованием словаря


я с помощью командной строки по SSH в мой код на Python, чтобы получить данные из командной строки commanda.
у меня есть две команды cli, которые дают мне выходные данные в табличной форме. поэтому я хочу сохранить данные, которые я получаю от команды, в словаре и использовать словарь, который я хочу объединить со значением ключа для отображения моих данных.

Что я уже пробовал:

######## python snippet to find CMS WAE Config details KPI's
import getopt
import logging
import time
import datetime
import json
import re
from paramiko import SSHClient, AutoAddPolicy
import silo_common.snippets as em7_snippets
from collections import defaultdict

SNIPPET_NAME = 'WAE: Config Details'
DEVICEIP            = self.ip
DID                 = self.did

DEBUG_STR= '%s : %s : %s' % ( SNIPPET_NAME, DID, DEVICEIP)


##uses ssh credential to establish an ssh session.
def ssh_conn():
    ##Set a default.
    if self.cred_details['cred_port'] is not None:
        ssh_port = self.cred_details['cred_port']
        print "ssh_port is", ssh_port
    else:
        ssh_port = 2024
    try:
        ssh = SSHClient()
        ssh.set_missing_host_key_policy(AutoAddPolicy())
        ssh.connect(self.cred_details["cred_host"], username=self.cred_details["cred_user"], password=self.cred_details["cred_pwd"], port=ssh_port)
        return ssh
    except Exception as e:
        PROBLEM_STR = "%s:%s: Exception Caught - %s: %s" % (DEBUG_STR,name, e.message, e.args)
        self.logger.ui_debug('Exception Caught : %s' % PROBLEM_STR)
        connection = []
    return connection

##executes cli request return either in list of rows, or long string.
def ssh_shell_request(ssh,request,output=False):
    res = []
    try:
        stdin, stdout, stderr = ssh.exec_command(request)
        self.logger.ui_debug ('output of exec command, stdout=%s ' % (stdout))
        
        if output is True:
            if stdout is not None:
                res = ''.join(stdout)
                self.logger.ui_debug ('result of the exec command when output is true=%s' % (res))
                return res
        else:
            for line in stdout:
                #line = line.translate(None, "\n\r\"")
                if (line == "" and SKIP_EMPTY_LINES):
                    continue
                else:
                    res.append(line.strip())
                    self.logger.ui_debug ('result of the exec command when output is false =%s' % (res))
            return res
    except Exception as e:
        PROBLEM_STR = "%s:%s: Exception Caught - %s: %s" % (DEBUG_STR,name, e.message, e.args)
        self.logger.ui_debug('Exception Caught : %s' % PROBLEM_STR)
    return res
    
##handles all the static calls and formats into cache object so we can save
def get_data(conn):
    res_data = {}
    arr_lines=[]
    try:
        ##We are only getting running containers by default.. add -a to see all containsers. (not tested)    
        request = "switch cli \n show ncs-state daemon-status ; show packages package oper-status"
        print "request is ", request
        lines = ssh_shell_request(conn,request)
        self.logger.ui_debug ('output of the shell request  =%s' % (lines))
        if lines is not None and isinstance(lines, list):
            for line in lines:
                arr_lines.append(line)
                self.logger.ui_debug ('arr lines inside the get data =%s' % (arr_lines))
                
        return arr_lines
    except Exception as e:
        PROBLEM_STR = "%s:%s: Exception Caught - %s: %s" % (DEBUG_STR,name, e.message, e.args)
        self.logger.ui_debug('Exception Caught : %s' % PROBLEM_STR)
    return arr_lines

def get_data_version(conn):
    arr_version = []
    ##We are only getting running containers by default.. add -a to see all containsers. (not tested)    
    request = " switch cli \n show packages package"
    lines= ssh_shell_request(conn,request)    
    self.logger.ui_debug ('output of the shell request  =%s' % (lines))
    if lines is not None and isinstance(lines, list): 
        for line in lines:
            arr_version.append(line)
            self.logger.ui_debug ('arr lines inside the get data =%s' % (arr_version))  
    return arr_version
    
#Main
daemonstatus = "started"
pck_name = {}
pck_status = {}
pck_version = {}

dd=defaultdict(list)

if self.cred_details['cred_type'] == 6:
    if self.cred_details['cred_host'] is not None \
    and self.cred_details['cred_pwd'] is not None \
    and self.cred_details['cred_user'] is not None:
        try:
        
            conn = ssh_conn()            
            if conn is not None:
                arr_lines = get_data(conn)
                arr_run_lines = get_data_version(conn)
                #arr_oper_lines = get_oper_datastore_data(conn)
                
                for line in arr_lines:
                    self.logger.ui_debug ('inside the arr lines array =%s' % (line))
                    line = line.lower()            
                    self.logger.ui_debug ('output of the get data in main loop in lower case  =%s' % (line))
                    if line.find('daemon-status started') > 0:
                       daemonstatus='started'
                       self.logger.ui_debug ('daemon-status line=%s,daemonstatus=%s ' % (line,daemonstatus))
                    
                    elif 'package' in line:
                        package_name.append((cnt,line.split(" ")[2]))
                    elif 'oper-status' in line:
                        pck_status.append((cnt,line.split(" ")[1]))
                        cnt = cnt + 1
                
                
        except Exception as e:
            PROBLEM_STR = "%s:%s: Exception Caught - %s: %s" % (DEBUG_STR,name, e.message, e.args)
            self.logger.ui_debug('Exception Caught : %s' % PROBLEM_STR)
status=[]
status.append((0,daemonstatus))

result_handler['daemon_status'] = status
result_handler['package_name']= package_name.items()
result_handler['package_status'] = pck_status.items()
result_handler['package_version'] = pck_version

Richard MacCutchan

В чем же вопрос?

0 Ответов