После выполнения команды Python Paramiko, как я могу сохранить результат? - PullRequest
19 голосов
/ 15 ноября 2011

Как вы видите ниже, возможно ли сохранить результат?Потому что во втором и третьем stdout.read () я не смог достичь результата.

import paramiko
import os
dssh = paramiko.SSHClient()
dssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
dssh.connect('192.168.1.250', username='root', password='pass')
import os
stdin, stdout, stderr = dssh.exec_command('ifconfig')
print stdout.read()
print ('Sleeping 2 seconds!')
os.system('sleep 2')
stdin, stdout, stderr = dssh.exec_command('ls -l')
print stdout.read()
print stdout.read()
print stdout.read()
dssh.close()

Ответы [ 2 ]

25 голосов
/ 15 ноября 2011

Представьте себе, что stdout - это обычный файл. Что вы ожидаете получить, если позвоните file.read() во второй раз? - ничего (пустая строка), если файл не был изменен снаружи.

Чтобы сохранить строку:

output = stdout.read()

Возможно, вы найдете Fabric более простым в использовании (для выполнения команд изнутри используется paramiko).

5 голосов
/ 11 апреля 2016

Вы можете попробовать этот универсальный API

def ssh_ctrl(ip, user, password,cmd):
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    try:
        ssh.connect(hostname=ip, username=user, password=password, timeout=tout, compress = True,look_for_keys=False, allow_agent=False)
    except (socket.error,paramiko.AuthenticationException,paramiko.SSHException) as message:
        print "ERROR: SSH connection to "+ip+" failed: " +str(message)
        sys.exit(1)

    stdin, stdout, ssh_stderr = ssh.exec_command(cmd)
    out = stdout.read()
    stdin.flush()
    ssh.close()
    return out
...