После выполнения команды Python Paramiko, как я могу сохранить результат?
Как вы видите ниже, можно ли сохранить результат? Причина, на втором и третьем 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()
Ответы
Ответ 1
Представьте, что stdout
является обычным файлом. Что вы ожидаете получить, если вы file.read()
второй раз? - ничего (пустая строка), если файл не изменился за пределами.
Чтобы сохранить строку:
output = stdout.read()
Вы можете найти Fabric проще в использовании (он использует paramiko
для выполнения команд под капотом).
Ответ 2
Вы можете попробовать этот общий 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