Как напечатать вывод в ясном формате, поскольку это получает печать в командной строке - PullRequest
1 голос
/ 21 октября 2019
  • Я пытаюсь подключиться по SSH к клиенту и выполнить команду, однако выходные данные не отформатированы, как показано на CLI сервера.
  • Я пыталсяиспользовать функцию печати и пытался записать в файл и проверил многочисленные статьи, но я думаю, что мне не хватает чего-то искать.

    import paramiko
    import sys
    
    hn = "valid IP Address"  #hostname of the client
    ssh_client = paramiko.SSHClient()
    ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh_client.connect (hostname = hn,username='randomUsername',password='randomPassword')
    print ("Connected to %s \n" % (hn))
    
    stdin, stdout, stderr = ssh_client.exec_command("ping 8.8.8.8 -c 4")
    stdout = stdout.readlines()
    print (stdout)
    
    stdin, stdout, stderr = ssh_client.exec_command("ping 8.8.4.4 -c 4")
    stdout = stdout.readlines()
    print (stdout)
    
  • Как я могу напечатать вывод, как это, И записать в файл? Токовый выход выглядит так:

    ['PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.\n', '64 bytes from 8.8.8.8: icmp_req=1 ttl=57 time=21.3 ms\n', '64 bytes from 8.8.8.8: icmp_req=2 ttl=57 time=21.0 ms\n', '64 bytes from 8.8.8.8: icmp_req=3 ttl=57 time=21.0 ms\n', '64 bytes from 8.8.8.8: icmp_req=4 ttl=57 time=21.2 ms\n', '\n', '--- 8.8.8.8 ping statistics ---\n', '4 packets transmitted, 4 received, 0% packet loss, time 3003ms\n', 'rtt min/avg/max/mdev = 21.041/21.173/21.313/0.159 ms\n']
    ['PING 8.8.4.4 (8.8.4.4) 56(84) bytes of data.\n', '64 bytes from 8.8.4.4: icmp_req=1 ttl=57 time=19.4 ms\n', '64 bytes from 8.8.4.4: icmp_req=2 ttl=57 time=19.1 ms\n', '64 bytes from 8.8.4.4: icmp_req=3 ttl=57 time=18.8 ms\n', '64 bytes from 8.8.4.4: icmp_req=4 ttl=57 time=19.0 ms\n', '\n', '--- 8.8.4.4 ping statistics ---\n', '4 packets transmitted, 4 received, 0% packet loss, time 3003ms\n', 'rtt min/avg/max/mdev = 18.819/19.135/19.470/0.233 ms\n']
    
  • Однако мне нужно, чтобы он печатался вот так

    ping 8.8.8.8
    PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
    64 bytes from 8.8.8.8: icmp_seq=1 ttl=56 time=3.79 ms
    64 bytes from 8.8.8.8: icmp_seq=2 ttl=56 time=3.58 ms
    64 bytes from 8.8.8.8: icmp_seq=3 ttl=56 time=14.8 ms
    64 bytes from 8.8.8.8: icmp_seq=4 ttl=56 time=3.37 ms
    --- 8.8.8.8 ping statistics ---
    4 packets transmitted, 4 received, 0% packet loss, time 3005ms 
    rtt min/avg/max/mdev = 3.375/6.409/14.891/4.899 ms
    

Спасибо за вашу помощь.

**** решено **** для i в stdout: print (i)

1 Ответ

0 голосов
/ 21 октября 2019

Stdout - это список строк - итерируйте по нему и печатайте каждую строку вместо печати всего списка.

for i in stdout:
    print(i) # you can add end='' if you want to remopve the double spacing -> print(i, end='')

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

...