Анализ неформатированной строки в python

#python #linux #shell #kubernetes #scripting

Вопрос:

Я новичок в python. Возможность получения данных в следующем формате :-

Вот код :-

 import paramiko
import json
class Remote_SSH:
    def __init__(self,name,command):
        self.name = name
        self.command = command

    def sshcont(self):
        ssh = paramiko.SSHClient()
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        ssh.connect(hostname = self.name, username='root')
        ssh.invoke_shell()
        stdin, stdout, stderr = ssh.exec_command (self.command)
        cmdout = (stdout.read())
        return cmdout
        ssh.close()

    def ssh_print(self):
        list_logs = []
        ssh = paramiko.SSHClient()
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        ssh.connect(hostname = self.name, username='root')
        sftp = ssh.open_sftp()
        stdin, stdout, stderr = ssh.exec_command (self.command)
        for logs in stdout:
            print logs.strip("n")
            list_logs.append(logs)
        ssh.close()
        return list_logs

kubectl_pods_data = Remote_SSH('IP_ADDRESS','kubectl get pods --namespace prelude').sshcont()
print '----------------------------------------------------------------'
print kubectl_pods_data
print type(kubectl_pods_data)
print '----------------------------------------------------------------'
 

вот результат

 NAME                                           READY   STATUS    RESTARTS   AGE
abx-service-app-78968c4446-dz586               1/1     Running   0          34d
abx-service-app-78968c4446-mn8jz               1/1     Running   0          34d
abx-service-app-78968c4446-rd8xq               1/1     Running   0          34d
approval-service-5c869c44b6-8vxwd              1/1     Running   0          34d
approval-service-5c869c44b6-j6zgr              1/1     Running   0          34d
approval-service-5c869c44b6-nqxv9              1/1     Running   0          34d

<type 'str'>
 

Я хочу напечатать значение в столбце имя, если соответствующее значение не выполняется . Я попытался преобразовать его в словарь, но не смог этого сделать . Любая помощь здесь будет оценена по достоинству.

Комментарии:

1. Пожалуйста, укажите свой код.

2. kubectl_pods_data = Remote_SSH(‘ip_адрес’,’кубектл получает модули —прелюдия пространства имен’).sshcont() . Эта команда используется для получения данных, remote_ssh-это модуль, который я написал по SSH на машину и выполнил команду

3. пожалуйста, укажите код в своем посте, а не в комментарии.

4. Готово , я обновил вопрос своим кодом

5. Значит, у вас kubectl_pods_data всего одна строка, хотя и красиво отформатированная?

Ответ №1:

Вы можете легко преобразовать свою строку в список списков строк, где каждый подсписк представляет строку в вашей таблице:

 lst_data=[x.split() for x in kubectl_pods_data.split('n')]
 

На этом этапе вы можете преобразовать эту структуру по своему усмотрению или даже использовать ее напрямую: например

 for row in lst_data:
    if row[2] != 'Running':
        print(row[0])