2011-11-15 67 views
13

Como ve a continuación, ¿es posible guardar el resultado? Causa, en el segundo y tercer stdout.read() No pude alcanzar el resultado.Después de ejecutar un comando por Python Paramiko, ¿cómo puedo guardar el resultado?

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() 

Respuesta

17

Imagínese que stdout es un archivo normal. ¿Qué espera obtener si llama al file.read() por segunda vez? - nada (cadena vacía) a menos que el archivo haya cambiado afuera.

Para guardar la cadena:

output = stdout.read() 

Puede que le resulte más fácil de usar Fabric (utiliza paramiko para ejecutar comandos bajo el capó).

+0

lo he intentado antes y no estaba trabajando. Pero ahora funciona. ¿Huh? Gracias de cualquier manera – nightrider84

6

puede probar esta API genérica

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 
Cuestiones relacionadas